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

2024-03-25

假设我们有两个 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 将两者连接在一起吗?


The 反应流 http://reactive-streams.org规范没有谈到分布式(跨网络)流,并且它的当前实现(以 Akka Streams 为例)都没有实现跨网络边界的流。这样做有点棘手(但可以做到,也可能会做到),因为它需要在消息丢失的情况下透明地重新传递。

简短的回答:你(目前)不能。然而,由于 Akka HTTP 是基于流的,并通过 TCP 应用背压,您可以通过以下方式连接流:基于 TCP 或 HTTP 的流 http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0-RC3/scala/stream-io.html并且背压将按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何订阅在不同 JVM 上运行的反应式流实现? 的相关文章

随机推荐