【问题标题】:Is is possible to setup internal exchange to send messages to the queue, if it's exist?是否可以设置内部交换以将消息发送到队列(如果存在)?
【发布时间】:2014-03-05 10:36:00
【问题描述】:

我有一个情况,我有一个 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 中获取消息(注意它们是动态来去的)并将它们发送到消费者队列(右侧),仅当消费者可用时?

【问题讨论】:

  • 我认为每个动态创建的队列都需要一个动态实例化的转发器进程来负责转发它的消息。我想您可以添加一个“签入”队列,每个动态队列都会发布到该队列,这样您的“MAGIC”进程就知道在出现新队列时该去哪里
  • 是的,我也在考虑这个问题。你知道内部交流是否能以某种方式帮助我吗?
  • 这不是我理解交换工作的方式(尽管我故意避免发布任何这些作为答案,因为我对消息队列不太了解(只是进入它们)以免劝阻更多知识渊博的人查看这个问题。Exchanges seem to work 关于您可以获取一条消息并将其分发到多个队列(基于绑定或主题)的想法,在这里您正在尝试相反,这听起来只是另一个队列。

标签: java python queue rabbitmq message-queue


【解决方案1】:

如果您希望交换“消费”这些消息,您可以使用 Shovel 插件来做到这一点。队列订阅交换(绑定到它们),而不是其他方式。

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

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

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多