我正面临 Symfony Messenger 组件的奇怪行为。我根据文档进行设置,并按照此处messenger:stop-workers
的说明在每次部署时发出信号。但是,我们的系统中出现了一个错误,我追溯到 Messenger 工作人员正在使用旧版本的代码这一事实。
经过进一步调查,这就是我们的设置中发生的情况:
- 一个工人正在运行,由主管管理。
- 只是为了调试这种特殊情况,我在终端
app/console messenger:consume --env=prod -vv async
中启动了一个新工作人员,看看会发生什么 - 我发出停止命令
app/console messenger:stop-workers --env=prod
- 我现在希望这两个工人都会被停止(并且主管会重新启动它正在处理的那个)。但是,这不会发生。“调试”工作人员确实停止了,但在主管下运行的工作人员什么也不做。
主管管理的工作人员被限制为 1 小时的处理时间,之后它们将停止并重新启动。我可以看到supervisord.log
这很好用。每小时都有关于进程停止和启动的日志条目。但是他们并没有停止messenger:stop-workers
命令。
我正在寻找关于为什么会发生这种情况的想法。我阅读了工人的实现,并通过缓存发送了关闭信号,但我没有发现我们的配置有任何问题。