排队系统 - 启动多个员工的好方法是什么?

Ali*_*man 9 queue worker-process message-queue gearman amazon-sqs

  • 如何为面向队列的系统设置一个或多个工作脚本?
  • 你如何安排启动 - 并在必要时重新启动 - 工作脚本根据需要?(我正在考虑像init.d /,基于Ruby的'上帝',DJB的Daemontools等等工具)

我正在开发一个异步队列/工作系统,在这种情况下使用PHP和BeanstalkdD(虽然实际的语言和守护进程并不重要).任务本身并不太难 - 将带有命令和参数的数组编码到JSON中,以便通过Beanstalkd守护程序进行传输,在工作脚本中将它们拾取以根据需要对其进行操作.

还有许多其他类似的队列/工作人员设置,例如Starling,Gearman,亚马逊的SQS以及其他更像"企业"的系统,如IBM的MQ和RabbitMQ.如果你运行像Gearman或SQS这样的东西 - 如何启动和控制工作池?问题出在最初的工人启动上,然后能够添加额外的额外工作人员,随意关闭它们(虽然我可以通过队列发送消息来关闭它们 - 只要一些'观察者'不会自动关闭它们重启它们).这不是一个PHP问题,它是关于设置一个或多个进程在启动时运行的直接Unix进程,或者向池中添加更多工作程序.

一个bash脚本循环的脚本已经到位-这将调用PHP脚本,然后收集并从队列中运行的任务,偶尔出来才能够清理自己(也可以暂停失败了几秒钟,或通过计划的事件).这样可以正常工作,并且在此基础上构建工作进程根本不会非常困难.

获得一个好的工作者控制器系统是关于灵活性,在机器启动时自动启动一个或两个,并且能够在队列繁忙时从命令行添加更多,在不再需要时关闭额外的东西.

小智 0

真正的消息队列中间件(例如 WebSphere MQ 或 MSMQ)提供“触发器”,其中作为 MQM 一部分的服务将在新消息放入队列时启动工作线程。

AFAIK,从野兽的本质来看,没有任何“网络服务”排队系统可以做到这一点。不过我只仔细看过SQS。在那里你必须对队列进行轮询,而在亚马逊的情况下,过于急切的轮询将会花费你一些真正的美元。