webman框架重启时,redis队列会直接结束正在消费的任务,这种情况如何处理呢?

邬綵唔惪

问题描述

webman框架中使用redis队列,运行过程中,如果进行reload/restart时,会直接结束正在消费的任务,导致任务处理一半,这种情况有啥方法处理吗?

812 2 1
2个回答

tanhongbin

业务处理一半是啥意思?没太理解呀

  • Le 2023-04-03

    应该是队列里有个操作,比较耗时,比如要10秒才能完成,但是2秒的时候就强制中断了

  • tanhongbin 2023-04-03

    哦哦

latin

config/server.php 里设置 stop_timeout ,这个是设置服务停止的超时时间。官方默认2秒,意思是如果进程在收到停止信号2秒后业务还没有处理完,就执行kill。
如果你的队列处理得慢,比如要10秒才能处理完,就设置成比10秒大的值,比如15。

  • Le 2023-04-03

    原来stop_timeout还有这层意思,之前以为是用户端超时,不过也代表了用户端的超时时间

  • 邬綵唔惪 2023-04-03

    队列任务处理需要10秒,stop_timeout 设置成15秒,11秒后又开始处理下一个队列任务了,还是有处理了一半问题,这咋办?

  • tanhongbin 2023-04-03

    这个参数不是这样理解的,是有任务正在消费,等待进程15秒,输出重启或者停止命令后就不会接受新的任务了,nginx平滑重启还记得吧

  • 邬綵唔惪 2023-04-03

    试了下,是能平滑重启,谢谢各位帅哥。

年代过于久远,无法发表回答
🔝