使用spring反应应用程序,我创建了一个每秒产生一个事件的休息服务。我的休息控制器的代码是:
@GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Event> getEvents() {
Flux<Event> eventFlux = Flux.fromStream(Stream.generate(() -> new Event(new Random().nextLong(), "Hello Event")));
Flux<Long> emmitFlux = Flux.interval(Duration.ofSeconds(1));
return Flux.zip(eventFlux, emmitFlux).map(Tuple2::getT1);
}
应用程序在浏览器中的url:localhost:8080 / events运行正常。我每秒钟都会举办一次新活动。但是当我关闭浏览器时,我收到以下错误:
java.io.IOException: An established connection was aborted by the software in your host machine
有没有人面对并解决任何与弹簧反应相似的问题?
答案 0 :(得分:2)
您会看到此消息,因为Spring WebFlux没有正确的方法来区分常规SSE流取消以及因网络连接问题而导致的意外连接关闭。
我们甚至过滤了一些典型的消息,比如“破管”,但我猜你是在Windows上,异常消息是本地化的,所以我们不能以可靠的方式做到这一点。
作为SPR-16688的一部分,从Spring Framework 5.0.6 / Spring Boot 2.0.2开始,我们已经改进了这种用例的日志记录,以使其更具相关性: