我可以使用RPCClient进行扇出交换吗?

时间:2015-06-19 15:10:45

标签: rabbitmq

我是RabbitMQ的新手,需要一些建议。

我遇到需要广播消息然后等待及时响应的情况。换句话说,广播消息期望来自所有订阅消费者的超时时段内的响应。直接交换很简单。我可以使用RPCClient来等待响应。它如何与扇出交换一起工作?它会知道有多少订户要等待吗?或者在第一次回复后它会成功返回吗?

如果我创建一个扇出交换并在创建RPCClient对象时传入它。然后实现我自己的消费者,并且来自同一交换和发送者的消费者消费者发送到相同的回复队列。会有用吗?

请指教。谢谢!

2 个答案:

答案 0 :(得分:1)

以下是您的问题:

  

广播消息需要在所有订阅消费者的超时期限内做出响应。

我强调说明你设计中的反模式。广播背后的概念是广播公司既不知道也不关心谁在听它。通过在广播公司上创建一个约束来知道谁在听,你已经有效地将一个广播变成了一堆单播,但是却试图这样做而没有真正承认它。

现在,让我描述一个更可行的方案,而不使用all这个词。

  1. 您通过扇出或主题交换发送广播消息。
  2. 消费者收到消息
  3. 消费者通过原始广播消息中指定的直接交换向回复队列发送新消息。
  4. 从回复队列中读取的使用者会消耗消息,直到超时期限结束。
  5. 希望所有消费者都回复,但没有办法知道。如果您需要消费者和广播公司之间的1对1通信,您的情况会变得更加复杂,并且广播不再是适当的场所。

答案 1 :(得分:0)

是的,它会起作用。 RPC是一种模式(如果我们排除直接回复)未绑定到直接交换。您可以将此模式应用于扇出交换。

而不是等待one reply,等待预期的回复或直到达到提示。

预期回复和扇出交换的知识通常是矛盾的。所以你只能依靠超时。