Php RabbitMQ basic_获得多个使用者

Php RabbitMQ basic_获得多个使用者,php,rabbitmq,Php,Rabbitmq,我正在将当前在cron上运行的一些资源密集型功能移动到RabbitMQ队列。我厌倦了长期运行的PHP用户脚本,因此我考虑执行以下操作: 作业在一天开始时添加到队列中 cron运行启动使用者的命令 消费者使用basic\u get获取作业,处理作业,确认作业,然后退出 cron再次运行并处理下一个作业 我有几个问题想问一下这会有多好 如果我决定通过cron启动两个worker(运行两次命令),而第一个作业仍在处理中,并且尚未得到确认,那么RabbitMQ会将相同的作业发送给第二个worker吗 我

我正在将当前在cron上运行的一些资源密集型功能移动到RabbitMQ队列。我厌倦了长期运行的PHP用户脚本,因此我考虑执行以下操作:

  • 作业在一天开始时添加到队列中
  • cron运行启动使用者的命令
  • 消费者使用
    basic\u get
    获取作业,处理作业,确认作业,然后退出
  • cron再次运行并处理下一个作业
  • 我有几个问题想问一下这会有多好

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

    我注意到,
    basic\u consume
    会更高效,因为在接收每个作业时没有往返。是否可以使用
    basic\u-consume
    而不是
    basic\u-get
    ,而不必担心让工人运行太久?

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

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

    我同意w/CantleepNow关于第一部分的观点,他认为当你让一个订阅者活着并让它处理多条消息时,基本消费更高效是正确的。不过,我不确定我是否会建议您在您的情况下进行基本消费。由于您希望处理一条消息,然后退出该过程,因此basic_get可能是正确的选择。谢谢各位。最终的计划是让Go应用程序作为一个长时间运行的工作程序,在将作业添加到队列时发出命令。当我们使用PHP作为监听器时,单作业执行只是权宜之计,因为我不相信长时间运行的PHP脚本的可靠性。所以我想基本的就行了。如果我们有积压工作,我仍然可以激发多个消费者@DerickBailey我几天前注册了你的RMQPatterns电子邮件,到目前为止帮了我很大的忙。谢谢