截至目前,我只为我的项目运行一个beanstalk工作线程,该线程处理基于cron的作业和实时作业。所以,我想把它分成两个工人。一个工作程序用于跟踪基于cron的作业,另一个工作程序用于跟踪实时异步作业。这样,工人的效率就会提高。任何人都可以帮助我,
注意:目前我正在使用pheanstalk php lib。
答案 0 :(得分:6)
使用pheanstalk(或其他库),如果您想接受来自多个队列的作业 - 只需观看它们。
$pheanstalk->watch('testtube')
->watch('tube2')
->watch('tube3');
$pheanstalk->reserve(); // get the next job from any of the tubes (+ 'default')
至于处理工作者,我目前正在使用Supervisord来创建一些我想要继续运行的非常相似的脚本。它是一个基于python的守护进程,你想要运行的脚本列在一个非常简单的配置文件中。 (添加更多工作人员实际上是在更改单个数字,并重新加载配置)。
我做的一件事是基于博客文章running-the-worker。 Supervisord运行shell脚本。该脚本运行PHP,而PHP又返回一个值(exit($x)
)。如果我从queue-runner返回一个值,(例如),99,我退出shell脚本来关闭worker。另一个值可能会立即重新启动工作人员,其他任何东西,在重新启动之前会休眠几秒钟。