man*_*avo 4 php service daemon beanstalkd
我创建了一个从beanstalkd读取并处理作业的PHP脚本.没有问题.
我要做的最后一件事就是为它编写一个init脚本,这样它就可以作为服务运行.
但是,这已经为我提出了另一个问题.当试图停止服务时,一种显而易见的方法是尝试杀死该进程.但是,如果我这样做,那么如果PHP脚本在处理它的过程中会发生什么呢?所以工作是保留的,但是脚本从未成功或失败(分别删除或埋葬),会发生什么?
我的猜测是TTR会过期,然后它会被放回就绪队列?
还有第二个问题,关于如何更好地管理停止PHP服务的任何提示?
当工作进程(beanstalk客户端)打开与beanstalkd的连接并保留作业时,作业将处于"保留"状态,直到客户端发出删除/释放命令(或)作业超时.
如果工作进程突然终止,它与beanstalkd的连接将关闭,服务器将立即释放使用该特定连接保留的所有作业.
参考:http://groups.google.com/group/beanstalk-talk/browse_thread/thread/232d0cac5bebe30f? hi_quotes = no#msg_efa0109e7af4672e
任何超时且未被埋没或touch编辑的作业都会返回到就绪队列中以进行保留。
我在其他地方发布了有关使用 Supervisord 和 shell 脚本来运行工作人员的文章。它的优点是,大多数时候,您可能不介意等待一段时间,因为工作会干净地完成。您可以让supervisord 终止运行worker 脚本的bash 脚本,当脚本本身完成时,只需退出,因为它无法重新启动。
另一种方法是将最高优先级(0)消息放入工作人员监听的管道中,这将使工作人员首先删除该消息,然后退出。我设置 shell 脚本来检查特定的返回值(来自exit($val);),然后它们也会退出 shell 脚本中的任何循环。
我已经将这些技术用于 Beanstalkd 和 AWS:SQS 队列运行程序一段时间了,每天处理通过系统运行的数百万个作业。
| 归档时间: |
|
| 查看次数: |
4498 次 |
| 最近记录: |