Rabbitmq 我可以将RPCClient与扇出交换一起使用吗?

Rabbitmq 我可以将RPCClient与扇出交换一起使用吗?,rabbitmq,Rabbitmq,我是RabbitMQ新手,需要一些建议 我的情况是,我需要广播一条信息,然后等待及时的回应。换句话说,广播消息期望所有订阅消费者在超时时间内做出响应。直接交换很简单。我可以使用RPCClient等待响应。它如何与扇出交换一起工作?它知道要等待多少用户吗?还是在第一次响应后它会成功返回 如果我创建扇出交换并在创建RPCClient对象时传入它。然后实现我自己的消费者和来自同一exchange和发送方的消费者发送到同一回复队列。这样行吗 请告知。谢谢 是的,它会起作用。RPC是一种模式(如果排除直接

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

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

如果我创建扇出交换并在创建RPCClient对象时传入它。然后实现我自己的消费者和来自同一exchange和发送方的消费者发送到同一回复队列。这样行吗


请告知。谢谢

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

不要等待,而是等待预期的答复或直到达到限时

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

这是您的问题:

广播消息要求所有订阅消费者在超时时间内做出响应

我增加了重点来说明您的设计中的反模式。广播背后的概念是,广播者既不知道也不关心谁在听广播。通过限制广播者知道谁在收听,您实际上已将一个广播更改为一组单播,但您正在尝试这样做,而实际上并不承认它

现在,让我描述一个更可行的场景,而不使用
all

  • 您可以通过扇出或主题交换发送广播消息
  • 消费者收到信息
  • 消费者通过在原始广播消息中指定的直接交换机向应答队列发送新消息
  • 从应答队列读取的使用者将使用消息,直到超时时间结束
    希望所有的消费者都回复了,但是没有办法知道。如果您需要消费者和广播公司之间的1对1通信,您的情况会变得更加复杂,广播不再是合适的场所。

    我同意。我正在尝试更新一些用JMS编写的遗留代码,它似乎在使用主题队列,就好像它是一个常规队列一样。因为我没有一个真正的测试用例,这使得它更难理解。我不明白的是,当我创建一个RPCClient时,它会侦听一个对队列的回复。那么现在,广播的RPCClient将等待多个请求?或者我需要破解RPCClient吗?如果我不使用现有的RPCClient类,我不知道如何最好地添加超时。你能建议一下吗?谢谢。为了回答您的第一个评论,我认为您确实需要向您的团队/前任或任何要求您修改代码以理解您试图做什么的人提问。对我来说这听起来很奇怪,这意味着他们可能正在努力实现一些基本的事情,并告诉你“如何”而不是“什么”,我读了你对上述答案的评论。你想从消费者那里得到心跳状态吗?我同意。但RPCClient将如何工作?默认情况下,RPCClient只等待一个响应。所以我需要破解代码并放入循环中来进行响应检索?这令人困惑。如何在分布式系统中执行heartbeat命令?