是否可以设置内部交换以将消息发送到队列(如果存在)?

时间:2014-02-07 20:51:30

标签: java python queue rabbitmq message-queue

我有一种情况,我有一个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/     |_______________________|

我知道如何创建ABC

问题:

是否可以设置某种internal-exchange,以便从左侧的所有tmp_queues抓取消息(注意它们动态地进出)并将它们发送到消费者队列(右侧),仅当消费者可用时?

1 个答案:

答案 0 :(得分:1)

如果您希望交换机“消费”消息,您可以使用Shovel插件执行此操作。队列订阅交换(绑定到它们),而不是其他。

或者他们可以进行主题交流。使用*和其他绑定键将tmp_queue_c与其各自的绑定键绑定。但在这种情况下,其他队列仍然会有他们的消息(他们不会被消费,除非有人消费它们而不是交换)。

编辑:我还有found this link关于交换到交换的绑定,可能对你的情况有用。在这种情况下,您可以将正常的交换发布到tmp_a_queuetmp_b_queue,但另一个交换magic绑定到您的2个第一个队列绑定的同一个交换。然后将tmp_c_queue绑定到magic交换,您将实现所需的行为。