收到1个事件后,反应堆通量停止并退订

时间:2019-03-08 10:36:22

标签: reactive-programming project-reactor

我有以下问题:我使用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)); 

2 个答案:

答案 0 :(得分:2)

这正是take运算符的作用:

.bodyToFlux(String.class)
.take(1)

答案 1 :(得分:-1)

在我的情况下,我认为blockFirst(Duration duration)是答案,因为它会等待一段时间,然后会引发超时。