我試圖展示背壓使用彈簧網反應就像它在這裏顯示的方式與阿卡 - https://www.youtube.com/watch?v=oS9w3VenDW0 (觀看28:20和29:20之間)。無法顯示背壓彈簧腹板反應
要嘗試一下我用下面的示例項目從GitHub https://github.com/bclozel/spring-boot-web-reactive
當我加入HomeController.java的新端點項目的設置,如下圖所示:
@RequestMapping(value = "/longflux",produces = "application/stream+json")
public Flux<Long> longFlux(){
return Flux.interval(Duration.ofMillis(10)).log();
}
現在,如果我嘗試捲曲這個端點,然後使用(CTRL + z)暫停它,只要tcp緩衝區被填滿並且服務器應該停止發送事件,反壓就應該被踢入。
然而,懸浮劑curl命令之後的某個拋出異常下面:
2017-02-16 08:49:48.480 ERROR 3500 --- [ timer-1] reactor.Flux.Interval.4 : onError(reactor.core.Exceptions$OverflowException: Could not emit value 2578 due to lack of requests)
2017-02-16 08:49:48.481 ERROR 3500 --- [ timer-1] reactor.Flux.Interval.4 :
reactor.core.Exceptions$OverflowException: Could not emit value 2578 due to lack of requests
at reactor.core.Exceptions.failWithOverflow(Exceptions.java:151) ~[reactor-core-3.0.4.RELEASE.jar:3.0.4.RELEASE]
at reactor.core.publisher.FluxInterval$IntervalRunnable.run(FluxInterval.java:98) ~[reactor-core-3.0.4.RELEASE.jar:3.0.4.RELEASE]
at reactor.core.scheduler.SingleTimedScheduler$TimedPeriodicScheduledRunnable.run(SingleTimedScheduler.java:394) ~[reactor-core-3.0.4.RELEASE.jar:3.0.4.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_121]
我不能夠理解爲什麼在某個時候curl命令懸浮後(在彈簧的web反應與異常終止了請求實現),而在akka示例中(如youtube鏈接所示),一旦tcp緩衝區已滿,服務器就停止發佈事件。
感謝布賴恩的指針。我現在可以用下面的源代碼來說明背壓。 這次我沒有使用過熱源,而是創建了一個列表,然後使用流來創建源代碼。 @RequestMapping(值= 「/ longflux」,產生= 「應用/流+ JSON」) 公共通量 longFlux(){ 列表列表=新的ArrayList (); \t for(int i = 0; i <1000000; ++ i){listId(「spring-boot-starter-web-reactive」); } return Flux.fromStream(list.stream())。log(); } –
simar