如何在反应式编程中实现热流

时间:2017-12-27 08:10:49

标签: reactive-programming spring-webflux reactive-streams

根据Reactive Stream范例,

  

目前,我们主要关注冷流。这些是静态的,固定长度的流,易于处理。一个更现实的反应用例可能是无限发生的事情。例如,我们可能会有一些鼠标移动,这些移动经常需要对其进行反应或推特。这些类型的流称为热流,因为它们始终在运行,并且可以在任何时间点订阅,从而错过了数据的开始。

那么我们如何实现这个热流?

2 个答案:

答案 0 :(得分:1)

这可以使用ConnectableFlux完成,如下所示:

ConnectableFlux<Object> publish = Flux.create(fluxSink -> {
    while(true) {
        fluxSink.next(System.currentTimeMillis());
    }
})
  .publish();

答案 1 :(得分:0)

您可以使用MongoDB的上限集合来创建热流。通过在该集合上使用@Tailable,它将创建一个发布者,该发布者发布每个新条目。借助.share(),它将多播该发布者,因此并非每个订阅都创建一个新的数据库连接。