如何从阻塞队列创建反应堆流量?

时间:2019-04-08 05:43:48

标签: java spring-webflux project-reactor

我正在尝试实现从BlockingQueue创建的反应堆Flux,但不确定哪个运算符最适合我的用例?

我正在创建一个流式REST端点,其响应是Flux,它需要不断从BlockingQueue发出消息作为对GET REST调用的响应。

我已经尝试过论坛和文档,并且只能从可迭代的集合或反应性数据源中找到Flux,而从任何BlockingQueue中都找不到示例。

1 个答案:

答案 0 :(得分:0)

您可以尝试Flux#generateQueue#peek。请记住,如果队列为空,peek将返回null,并且不能在onNext中使用。

类似的东西:

Flux.generate(sink -> {
    val element = queue.peek();
    if (element == null) {
        sink.complete();
    } else {
        sink.next(element);
    }
});

还有一个Flux#repeatWhen运算符,以防您想在队列被认为为空后重新订阅该队列,例如与:

flux.repeatWhen(it -> it.delayElements(ofSeconds(1)))