RabbitMQ basic_get有多个消费者

时间:2016-06-09 21:13:40

标签: php rabbitmq

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

  1. 在一天开始时将作业添加到队列中。
  2. cron运行一个启动消费者的命令。
  3. 消费者使用basic_get来找工作,处理工作,确认工作然后退出。
  4. cron再次运行,处理下一个作业。
  5. 我对这将如何运作有几个问题。

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

    我注意到basic_consume会更高效,因为接收每份工作时都没有往返。是否可以使用basic_consume而非basic_get,而不必担心工人被遗弃的时间太长?

1 个答案:

答案 0 :(得分:2)

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

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