我有一种情况,我有一个RabbitMQ集群。我有多个生产者,它们生成不同的数据。我希望每个生产者根据参数设置一个临时队列,如果队列为空,则删除队列。
例如生产者A和B:
A ----- tmp_a_queue
B ----- tnp_b_queue
我想这样做是为了扩展系统的吞吐量。接下来,我希望我的消费者在能够使用时创建单个队列,并从两个队列中获取消息。
例如,将消费者C添加到上面的模板:
_______________________
A ----- tmp_a_queue\ | |
====| SOME MAGIC GOES HERE |-----tmp_c_queue C
B ----- tnp_b_queue/ |_______________________|
我知道如何创建A
,B
和C
。
问题:
是否可以设置某种internal-exchange
,以便从左侧的所有tmp_queues
抓取消息(注意它们动态地进出)并将它们发送到消费者队列(右侧),仅当消费者可用时?
答案 0 :(得分:1)
如果您希望交换机“消费”消息,您可以使用Shovel插件执行此操作。队列订阅交换(绑定到它们),而不是其他。
或者他们可以进行主题交流。使用*和其他绑定键将tmp_queue_c与其各自的绑定键绑定。但在这种情况下,其他队列仍然会有他们的消息(他们不会被消费,除非有人消费它们而不是交换)。
编辑:我还有found this link关于交换到交换的绑定,可能对你的情况有用。在这种情况下,您可以将正常的交换发布到tmp_a_queue
和tmp_b_queue
,但另一个交换magic
绑定到您的2个第一个队列绑定的同一个交换。然后将tmp_c_queue
绑定到magic
交换,您将实现所需的行为。