1

我们有一堆我们计划发布到队列的请求。

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

例如 Request1 被推入队列

LoggingSubscriber1 和 LoggingSubscriber2 都使用“LoggingSubscriber”subscriptionId 进行订阅,因此只有其中一个会收到请求。

还会有其他组,例如 DoProcessSubscriber1、DoProcessSubscriber2 和 DoProcessSubscriber3

还有另一个 DoOtherProcessSubscriber1、DoOtherProcessSubscriber2

我们需要某种方式来知道所有三个订阅者(Logging、DoProcess 和 DoOtherProcess)都已完成,以便我们可以执行一些操作……比如向客户端发送一条消息,表明所有整个请求都已完成。

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

4

1 回答 1

1

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

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

于 2013-10-14T08:24:38.413 回答