【问题标题】:Only one consumer per RabbitMQ queue每个 RabbitMQ 队列只有一个消费者
【发布时间】:2017-04-13 08:27:53
【问题描述】:

我在这个 php 库 https://github.com/jakubkulhan/bunny 的帮助下使用 RabbitMQ,现在我的代码按以下方式工作:每个队列都有单独的类,用于将新消息添加到队列和单独的队列工作程序,例如:SmsQueue 和 SmsWorker .我运行队列工作者 (例如 SmsWorker)来自 cron,问题是我只想在工作人员尚未运行时才运行它。我认为 RabbitMQ 有一些方法可以查看当前是否有队列的活动消费者,但我找不到它。这里的解决方案是什么,我做得对吗?

附:我刚开始使用 RabbitMQ,对它了解不多,如果这是一个愚蠢的问题,请见谅。

【问题讨论】:

    标签: php rabbitmq amqp


    【解决方案1】:

    我认为 RabbitMQ 有一些方法可以查看当前是否有队列的活动消费者,

    不直接,不。

    您也许可以在管理工具的 HTTP API 中找到一种查询方法,但我不会这样做。查询运行和您启动代码之间的时间量可能允许创建多个应用程序实例。

    相反,我会考虑两个选项:

    1) 为消费者请求对队列的独占访问权(不确定您的库,但它是 AMQP 规范的一部分:https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume.exclusive

    2) 在您的应用程序中使用互斥锁,以确保您的应用程序只运行一次

    或者,设置您的消费者应用程序,以便您只有一个实例并且它始终在运行。如果您不动态启动新实例,则永远不会有多个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2018-04-10
      相关资源
      最近更新 更多