关于gateway:底层到底做了什么-spring-gateway里webflux-里reactor-core里的flux
引言: spring cloud gateway --> webflux --> reactor-netty --> reactor-core 以上是github上几个我的项目的依赖关系。 阐明:reactor-core是reactive programming模型的一个具体实现。 本文简略阐明在reactor-core中,flux工作底层到底做了什么。 先说给一个 demo代码 Flux<String> data = Flux.just("hello", "hello2"); data = data.map(e -> e + " world"); data.subscribe( e -> System.out.println(e) );Flux<String> data = Flux.just("hello", "hello2");这个办法外部创立一个FluxArray对象,把数据存储到array参数里。 data = data.map(e -> e + " world"); 这个办法外部创立一个FluxMapFuseable对象,把FluxArray对象存储到source参数里,把(e -> e + " world")存储到mapper。 这个办法逻辑就是通过把原来的数据和新的解决逻辑,一层一层的封装起来。 data.subscribe( e -> System.out.println(e) );在办法的底层调用的是Flux类的subscribe()办法,代码如下(省略局部代码): OptimizableOperator operator = (OptimizableOperator)publisher; while(true) { subscriber = operator.subscribeOrReturn(subscriber);//1 if (subscriber == null) { return; } OptimizableOperator newSource = operator.nextOptimizableSource();//2 if (newSource == null) { publisher = operator.source(); break; } operator = newSource; } } publisher.subscribe(subscriber);//3其中,最开始的publisher就是下面的FluxMapFuseable对象,subscriber就是下面( 的(e -> System.out.println(e) )。 ...