我尝试使用Akka流来构建一个pub sub总线,方法如下:
发布服务器为主题添加源流,订阅服务器指定主题并获取该主题的所有内容。但是,主题可以由多个发布服务器发布,并且发布服务器与订阅服务器都可以随时加入。
我的想法是合并所有源,然后将过滤后的源返回给订阅者。
然而,由于发布者可以在任何点加入,因此可以在进行订阅之后添加源,并且订阅者需要从该源获得数据,就像该主题的任何其他已发布数据一样。
是否有一种方法可以动态地管理流到源的合并,以便满足以下条件:
publish(topic: String, messages: Source[T])
subscribe(topic: String): Source[T]
这样,无论何时添加发布者,主题的订阅者都将在进行订阅后获得发布到与该主题相关的任何源的所有消息。
也很高兴听到替代方法。
谢了,Z
2条答案
按热度按时间des4xlb01#
你可能想看看这个Akka文件:使用
MergeHub
和BroadcastHub
构建dynamic pub-sub service
。以下是分别使用
MergeHub
和BroadcastHub
作为动态扇入和扇出结点的示例代码。其思想是将
MergeHub
与BroadcastHub
连接起来,以Flow viaFlow.fromSinkAndSource
的形式形成一个pub-sub通道:请注意,上述代码片段中的
Keep.both
从MergeHub.source[T]
和BroadcastHub.sink[T]
生成了一个物化值(Sink[T, NotUsed], Source[T, NotUsed])
的元组,它们具有以下方法签名:下面是一个简单的发布-订阅通道
busFlow
的示例代码(类似于Akka文档中的示例):测试
busFlow
:busFlow
作为pub-sub通道,其输入通过bfSink
发布到所有订阅者,而其输出则通过bfSource
传输所有发布的元素。例如:其他可能感兴趣的相关主题包括用于流完成控制的
KillSwitch
和用于将Stream元素从给定的生成器路由到动态的一组使用者的PartitionHub
。vwhgwdsa2#
以下是我最后做的事情。发布者和订阅者都可以出现和消失,无论订阅者何时加入,也无论发布者何时加入,订阅者都应该能够看到他们订阅的所有发布消息(按主题),而不管在订阅时哪些发布者是活动的。欢迎评论。