-
Notifications
You must be signed in to change notification settings - Fork 128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
queue:work 经常过一段时间不再处理队列是什么原因? #114
Comments
同样问题 |
同样情况,还以为自己代码的问题... |
同意问题+1 |
是不是长时间无任务,导致数据库链接断开,而数据库没有设置断线重连啊 |
@DongDavid 推测并不是, 我是使用Redis驱动出现的,换成mysql之后,到目前为止都没有问题 |
最好使用php think queue:listen 别用php think queue:work work里的连接断了 是不会重连的,redis的连接也会断的 |
@cnbattle 我指的是你的业务代码中的Db链接断开了。 $result = Db::name('dome')->insert([
'times' =>date("Y-m-d H:i:s",time()),
'name' =>$data
]); php queue队列, 使用redis进行驱动, 但是在具体的任务执行过程中,我看你的代码使用连接了mysql数据库的。 而如果使用了work来运行队列, 则会在一个单一进程中重复执行这个Job, 且使用的是同一个Db连接, 那么当你长时间没有添加新的任务时,这个Db连接就会自动被断开, 导致后续新添加的任务执行的时候因为数据库连接失败而执行失败。 |
之前我碰到过这个错误, 不过我在日志中找到了它, 所以我把database.php里面的断线重连break_reconnect打开后, 就不再出错了。 |
@cnbattle 。 你把queue的驱动换成了mysql 0.0 。 或许你可以试试, queue的mysql驱动连接一个数据库, 而业务数据连接另一个数据库, 两者使用不同的mysql连接, 那么长时间没有任务的情况下, 业务数据库的连接应该会被自动断开的。 |
楼主解决了没,同样 redis + supervisor ,第二天work 不执行了,进程还在! |
一般都是redis连接断了,redis的连接断开后 程序是继续运行的 会调用ExceptionHandler的report方法报警 |
使用 supervisor 管理队列处理进程: php think queue:work --queue order--daemon --tries 10由于项目不断会有新的任务进入队列,所以希望队列是保持一直运行。但是过一段时间,查看进程 ps -aux | grep 'order' 仍然能看到进程在运行,但是已经不处理队列了,需要php think queue:restart 重启任务才行,这是什么原因造成的呢,是 supervisor 的问题还是队列处理的问题?
// 这个消息发送入口
public function queue()
{
$res = Queue::push('app\index\controller\Login@fire', '28456049@qq.com', $queue = 'order');
// 这个是消息接收入口
public function fire(Job $job, $data)
{
// 这个是消息处理
private function send($data)
{
The text was updated successfully, but these errors were encountered: