编程语言
首页 > 编程语言> > php – beanstalkd – 保留但未完成的工作会发生什么?

php – beanstalkd – 保留但未完成的工作会发生什么?

作者:互联网

我创建了一个从beanstalkd读取并处理作业的PHP脚本.没有问题.

我要做的最后一件事就是为它编写一个init脚本,这样它就可以作为服务运行.

但是,这已经为我提出了另一个问题.当试图停止服务时,一种显而易见的方法是尝试杀死该进程.但是,如果我这样做,那么如果PHP脚本在处理它的过程中会发生什么呢?所以工作是保留的,但是脚本从未成功或失败(分别删除或埋葬),会发生什么?

我的猜测是TTR会过期,然后它会被放回就绪队列?

还有第二个问题,关于如何更好地管理停止PHP服务的任何提示?

解决方法:

任何耗尽时间,未被掩埋或触摸的作业都会返回到准备好的队列中进行保留.

我发布了关于使用Supervisord和shell脚本来运行worker的elsewhere.它的优势在于,大部分时间,你可能不介意等待一段时间干净地完成工作.你可以让supervisord杀死运行工作脚本的bash脚本,当脚本本身完成时,只需退出,因为它无法重新启动.

另一种方法是将最高优先级(0)消息放入工作人员监听的管中,这将使工作人员首先删除该消息,然后退出.我设置shell脚本来检查特定的返回值(从exit($val);)然后它们也会退出shell脚本中的任何循环.

我已经将这些技术用于Beanstalkd以及AWS:SQS队列运行器一段时间,每天处理数百万个通过系统运行的作业.

标签:php,service,daemon,beanstalkd
来源: https://codeday.me/bug/20190610/1209282.html