我有以下问题:我使用Spring搭建了一个客户端Reactor.core.publisher.Flux来监听等待某些事件的SSE,如果它在15秒后仍未收到它们(timeout(Duration.ofSeconds(15 )))它会做其他事情。但是,如果在前15秒内收到事件,我希望流量停止并退订用户。 这是一些代码:
flux = webClient.get()
.uri(URI)
.accept(MediaType.TEXT_EVENT_STREAM)
.retrieve()
.bodyToFlux(new ParameterizedTypeReference<PagedResources<Foo>>() {})
.timeout(ofSeconds(15));
eventStream.doOnError(e -> {
logger.info("No event was received in 15 seconds!");
}).subscribe(new CustomConsumer(reporter));
答案 0 :(得分:2)
这正是take
运算符的作用:
.bodyToFlux(String.class)
.take(1)
答案 1 :(得分:-1)
在我的情况下,我认为blockFirst(Duration duration)是答案,因为它会等待一段时间,然后会引发超时。