如何订阅在不同JVM上运行的反应流实现?

时间:2015-03-06 15:05:42

标签: jvm akka-stream reactive-streams

假设我们有两个Akka Stream流,每个流都在自己的JVM上运行。

// A reactive streams publisher running on JVM 1:
val stringPublisher: Publisher[String] = Source(() => "Lorem Ipsum".split("\\s").iterator).runWith(Sink.publisher[String])

// A reactive streams subscriber running on JVM 2:
def subscriber: Subscriber[String] = Sink.foreach[String](println(_)).runWith(Source.subscriber[String])

// Subscribe the second stream to the first stream
stringPublisher.subscribe(subscriber)

此示例在一个JVM上运行正常,但我如何订阅在不同JVM上运行的发布者?

我是否必须使用消息传递/排队中间件,还是可以使用反应流API将两者连接在一起?

1 个答案:

答案 0 :(得分:3)

reactive-streams规范没有谈到分布式(交叉网络)流,并且它的当前实现(例如Akka Streams)都没有实现跨越网络边界的流。这样做有点棘手(但可以完成,可能会有),因为它需要在消息丢失的情况下进行透明的重新传递。

简答:你(目前)不能。但是,由于Akka HTTP是基于流的,并且通过TCP应用反压,您可以通过stream based TCP or HTTP连接流,并且背压将按预期工作。