Java 弹簧腹板不能够显示背压
我正试图用spring web Responsive展示背压,就像这里用akka展示的一样- (在28:20和29:20之间观看) 为了试用它,我使用了github的以下示例项目 设置项目后,我在HomeController.java中添加了一个新端点,如下所示:Java 弹簧腹板不能够显示背压,java,spring,project-reactor,spring-webflux,Java,Spring,Project Reactor,Spring Webflux,我正试图用spring web Responsive展示背压,就像这里用akka展示的一样- (在28:20和29:20之间观看) 为了试用它,我使用了github的以下示例项目 设置项目后,我在HomeController.java中添加了一个新端点,如下所示: @RequestMapping(value = "/longflux",produces = "application/stream+json") public Flux<Long> longFlux(){ ret
@RequestMapping(value = "/longflux",produces = "application/stream+json")
public Flux<Long> longFlux(){
return Flux.interval(Duration.ofMillis(10)).log();
}
我无法理解为什么在curl命令挂起后的某个时间请求异常终止(在spring web反应式实现中),而在akka示例中(如youtube链接中所示),服务器在tcp缓冲区满后停止发布事件。
Flux.interval
是一个特例,因为它是一个热源,时间不受反应器的缓冲;这意味着,若你们的请求周期由于背压而变慢,而你们的间隔源产生的速度更快,反应堆将发出一个错误信号
您可以使用.onBackpressureDrop()
操作符更新此示例,以在出现背压时降低间隔。这应该像预期的那样
有许多方法可以说明背压,包括:
- 使用
运算符延迟订阅delay
- 模拟多个慢速客户端(带宽和延迟)
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]