以前php-fpm,都是直接发布代码,没有其他顾虑
现在用webman,线上环境,如何更新呢?
1.
如果直接 php start.php restart -d
,会造成请求中断吗?
比如,某一个worker进程,正在处理请求,这时候直接 restart,会中断请求吗?
2.
redis队列,消费者正在消费消息,这个时候更新,这条消息是不是就没有了?
所以这种情况,专业的MQ,有ack机制,就能避免这种情况的发生?
3.
如果只用一台服务器运行webman,应该如何发布更新呢?
有没有思路可以提供一下
平滑重启了解一下:
https://www.workerman.net/doc/workerman/faq/reload-principle.html
框架会等待业务执行完毕关闭进程,所以正常情况下不会中断请求。但是如果进程收到停止命令后业务超过2秒还没有结束会被强行杀死,强行杀死进程时会造成请求中断。
同上,redis队列没有ack机制,如果消费慢超过2秒可能发生restart 可能导致消费中断,消息丢失。
专业的MQ,有ack机制,可避免。
更改业务代码reload即可,不需要restart。
如果更新vendor里的库,需要restart。
老大,这个
2秒
,是否可以自定义因为很多时候,进程不一定能在2秒内处理完,从而响应主进程的指令
如果,可以根据具体的业务情况,自定义这个
2秒
,比如设置为10秒这样,就可以避免强行杀死进程,造成数据丢失的情况
这样的话,在线上,直接 restart 或者 reload,就更好了
下个workerman版本支持自定义
谢谢老大
多问已经,下个workerman版本,大概什么时候上
时间不定,你先手动改下吧 KILL_WORKER_TIMR_TIME
就是这个数值