我如何知道所有订阅者何时完成?

时间:2013-10-11 21:08:01

标签: rabbitmq publish-subscribe easynetq

我们计划发布一系列请求到队列。

将有几种不同的订阅者类型,每种类型都在自己的循环池中。

例如,将Request1推送到队列

LoggingSubscriber1和LoggingSubscriber2都使用“LoggingSubscriber”subscriptionId订阅,以便只有其中一个获得请求。

还有其他组,如DoProcessSubscriber1,DoProcessSubscriber2和DoProcessSubscriber3

另一个DoOtherProcessSubscriber1,DoOtherProcessSubscriber2

我们需要一些方法来了解所有三个订阅者(Logging,DoProcess和DoOtherProcess)都已完成,以便我们可以执行某些操作...就像向客户端发送一条消息,表明所有请求都已完成。< / p>

我们如何汇总这样的回复?我们考虑让每个订阅者在队列中放置一个响应对象,但我们仍然不确定如何知道它们都已完成。

1 个答案:

答案 0 :(得分:1)

理想情况下,您使用EasyNetQ内置的请求/响应模式,但这是为单个(可能是养殖的)消费者设计的。它不允许您绑定到多个队列。在您的情况下,您可能应该让您的客户设置回复订阅,并让所有三个服务在完成后发布消息。然后客户端可以等到它在更新之前得到所有三个响应。

但是,我鼓励你重新考虑你的设计。通过让客户负责确认订户的完成,您正在构建一个非常紧密耦合的系统。如果采用最终一致性的概念,消息传递系统设计会更好。允许您的客户端发送,并进行一些审核,确保最终完成所有预期的处理。