【问题标题】:RabbitMQ basic_get with multiple consumersRabbitMQ basic_get 与多个消费者
【发布时间】:2016-06-09 21:13:39
【问题描述】:

我正在将当前在 cron 上运行的一些资源密集型功能移动到 RabbitMQ 队列。我厌倦了长时间运行 PHP 消费者脚本,所以我正在考虑执行以下操作:

  1. 作业会在一天开始时添加到队列中。
  2. cron 运行启动消费者的命令。
  3. 消费者使用basic_get 获取作业、处理作业、确认作业然后退出。
  4. cron 再次运行并处理下一个作业。

我有几个关于这将如何运作的问题。

如果我决定通过 cron 启动 2 个工作人员(运行命令两次)并且第一个工作仍在处理中,并且尚未得到确认,那么 RabbitMQ 是否会向第二个工作人员发送相同的工作?

我注意到basic_consume 的性能会更高,因为在接收每项工作时没有往返。是否可以使用basic_consume 而不是basic_get 而不必担心工人跑太久?

【问题讨论】:

    标签: php rabbitmq


    【解决方案1】:

    第一部分: 不,它不会。这只会发生在第一个消费者没有确认消息而死亡的情况下 - 然后该消息被重新排队并且下一个消费者得到它。

    第二部分: 您应该使用basic_consume,因为它更快、异步且通常更好。使用任何消息检索方法都与消费者将运行多长时间无关。

    【讨论】:

    • 我同意第一部分 w/ cantSleepNow,他是正确的,当您让订阅者保持活动状态并让它处理多条消息时,basic_consume 的性能会更高。不过,我不确定我是否会在您的情况下建议 basic_consume 。由于您想处理单个消息然后退出进程,因此 basic_get 可能是正确的选择。
    • 谢谢大家。最终的计划是让一个 Go 应用程序作为一个长时间运行的工作程序,只要将作业添加到队列中就会触发命令。当我们使用 PHP 作为侦听器时,单个作业执行只是一个权宜之计,因为我不相信长时间运行的 PHP 脚本的可靠性。所以我想 basic_get 会做。如果我们有积压,我仍然可以启动多个消费者。 @DerickBailey 几天前我注册了您的 RMQPatterns 电子邮件,到目前为止非常有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多