我需要为发布到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 }
}
}
但是我找不到任何从mediator检索订阅者集的方法......如果有一个消息请求GetTopicSubscribers会将这些信息暴露给中介客户端,那就太棒了:
mediator ! GetTopicSubscribers("mytopic")
因此,在发布主题后,发布者可以等待来自所有活动订阅者的Ack消息。有没有其他方法来完成这样的事情? 如果能以某种方式将akka.contrib.pattern.ReliableProxy插入到DistributedPubSubMediator中,那将会很棒。
答案 0 :(得分:0)
您可以让发布商通过akka.cluster.pubsub.DistributedPubSubMediator.CountSubscribers(“ myTopic”)向中介者询问订阅者人数
然后,它只需要统计从订阅者那里收到的Ack消息的数量即可。
无需跟踪实际订户或确认了哪些订户,当您的Ack计数达到订户计数时,您就知道他们已经全部收到(感谢Akka最多一次的交付可靠性)
但是请注意source code中的此评论:
// Only for testing purposes, to poll/await replication
case object Count
final case class CountSubscribers(topic: String)
建议CountSubscribers也许不是太依赖吗?