RabbitMQ / AMQP HA应用程序:消费者死亡/退出后持续排队?

时间:2016-06-13 13:49:00

标签: rabbitmq

我正在使用RabbitMQ创建一个非常基本的应用程序来进行消息传递。消息在一个服务器上发布,然后下游的第二个服务器将具有消耗消息的长时间运行的进程。现在,我把它设置如下:

出版商:

  1. 声明直接交换 myexchange
  2. 使用路由密钥 payload.routingkey
  3. 将消息发布到 myexchange 交换

    消费者计划:

    1. 声明直接交换 myexchange
    2. 声明队列 my-specific-queue-name (选项持久设置为true
    3. my-specific-queue-name 队列绑定到 myexchange exchange
    4. 使用来自 my-specific-queue-name
    5. 的消息

      我的这个过程运作良好。我遇到的情况是,如果我的消费者程序消失,似乎发送到 myexchange 的新消息将丢失,因为没有队列将被绑定到交换机。是否存在这样的配置,即使消费者程序消失,消息仍然可以排队,以便当消费者程序重新联机时,仍然可以接收消息?

1 个答案:

答案 0 :(得分:0)

当我写这个问题时,我似乎意识到了一个答案,发表在下面。当然,如果这是一个坏主意,或者你有其他建议,请离开。

如果您使用默认交换(使用空字符串作为名称进行交换),您可以声明一个队列,它将自动绑定到此默认交换(请参阅Default Exchange)。因此,您可以在发布者上声明 my-specific-queue-name 队列,然后重新声明它并在您的使用者脚本中开始使用它。在AMQP / RabbitMQ中,您可以多次重新声明事物,只有在它们不存在的情况下才能创建它们。因为您要在发布者上声明队列,所以如果有其他系统正在侦听来自该发布者的消息,则无关紧要。