gpt4 book ai didi

scala - Akka DistributedPubSubMediator at-least-once delivery guarantees for publishing to a topic

转载 作者:行者123 更新时间:2023-12-04 19:50:44 26 4
gpt4 key购买 nike

我需要为发布到 DistributedPubSubMediator 主题的消息提供至少一次传递保证。

我查看了 DistributedPubSubMediator.scala,可以在 TopicLike 特征(Akka 2.4.6)中看到以下内容:

trait TopicLike extends Actor {
var subscribers = Set.empty[ActorRef]

def defaultReceive: Receive = {
case msg ?
subscribers foreach { _ forward msg }
}
}

但是我找不到任何方法来从中介检索订阅者集...如果有消息请求 GetTopicSubscribers 会将此信息公开给中介客户端,那就太好了:

mediator ! GetTopicSubscribers("mytopic")

因此在发布到主题后,发布者可以等待来自所有事件订阅者的 Ack 消息。还有其他方法可以完成类似的事情吗?如果能以某种方式将 akka.contrib.pattern.ReliableProxy 插入到 DistributedPubSubMediator 中,那就太好了。

最佳答案

您可以让您的发布商通过 akka.cluster.pubsub.DistributedPubSubMediator.CountSubscribers 向调解员询问订阅者数量。 (“我的主题”)

然后它只需要记录从订阅者那里收到了多少 Ack 消息。

无需跟踪实际订阅者或哪些订阅者已确认,当您的 Ack 计数达到订阅者计数时,您知道他们都已收到(感谢 Akka at-most-once 交付可靠性)

但是请注意 source code 中的这条评论:

// Only for testing purposes, to poll/await replication
case object Count
final case class CountSubscribers(topic: String)

也许 CountSubscribers 不是太依赖的东西?

关于scala - Akka DistributedPubSubMediator at-least-once delivery guarantees for publishing to a topic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com