Distributed Publish Subscribe in Cluster

模块信息

分布式发布订阅主题API在核心的akka-actor-typed的模块中可用,但是仅在集群应用程序中使用时:

Topic Actor

通过使用actor表示每个pub子主题,可以实现分布式发布订阅,akka.actor.typed.pubsub.Topic。

主题actor需要在订阅者宿主的每个节点上运行,或者要向该主题发布消息。

主题的标识是可以发布的消息类型的元组和主题名称的字符串,但是建议不要定义具有不同类型和相同主题名称的多个主题。

然后,本地actors可以订阅主题(并取消订阅):

发布消息到该主题

Pub Sub可伸缩性

每个主题都由一个“接待员”服务key表示,这意味着主题的数量将扩展到数千或数万,但对于更多的主题,则需要自定义解决方案。这也意味着特定主题的很高周转率将无法正常工作,因此对于此类用例,建议使用自定义解决方案。

主题actor充当代理,并委派给处理重复数据的本地订阅者,这样,发布的消息仅发送到节点一次,而不管该节点上有多少订阅者。

当主题actor没有主题订阅者时,它将从接待员中注销自己,这意味着将不会向该actor发布已发布的消息。

可靠传递

与Akka的“消息传递可靠性”一样,分布式pub子模式下的消息传递保证最多只能传递一次。换句话说,消息可能会丢失。除了具有订阅者的节点的注册表最终是一致的之外,这意味着在一个节点上订阅一个actor会有短暂的延迟,然后才能在其他节点上知道并发布。

如果您希望至少一次传递保证,我们建议您选择Alpakka Kafka。

你可能感兴趣的:(akka,cluster)