gpt4 book ai didi

Symfony messenger 工作人员在主管下运行时不会停止

转载 作者:行者123 更新时间:2023-12-03 14:31:42 25 4
gpt4 key购买 nike

我正面临 Symfony Messenger 组件的奇怪行为。我是按照documentation设置的我发出 messenger:stop-workers按照指示在每次部署时发出信号here .但是,我们的系统中出现了一个错误,我追溯到 Messenger 工作人员正在使用旧版本的代码这一事实。
经过进一步调查,这就是我们的设置中发生的情况:

  • 一个 worker 正在运行,由主管管理。
  • 只是为了调试这种特殊情况,我在终端 app/console messenger:consume --env=prod -vv async 中启动了一个新工作人员。看看会发生什么
  • 我发出停止命令 app/console messenger:stop-workers --env=prod
  • 我现在希望这两个 worker 都会被停止(并且主管会重新启动它正在处理的那个)。但是,这不会发生。 “调试”工作人员确实停止了,但在主管下运行的工作人员什么也不做。

  • 主管管理的工作人员被限制为 1 小时的处理时间,之后它们将停止并重新启动。我可以在 supervisord.log 中看到这很好用。每小时都有关于进程停止和启动的日志条目。但是他们从 messenger:stop-workers 停止了任何事情。命令。
    我正在寻找关于为什么会发生这种情况的想法。我阅读了 worker 的实现,并通过缓存发送了关闭信号,但我没有发现我们的配置有任何问题。

    最佳答案

    我遇到了类似的问题。
    如您所见,为了强制停止其余的消费者,该命令使用缓存池。在我的情况下(也可能是你的情况),是存储在 /your_symfony_app/var/cache/{env}/pools 中的文件系统池。
    因此,如果您使用 Deployer 或任何其他用每个新部署替换符号链接(symbolic link)的部署系统,您需要执行命令 messenger:stop-workers文件夹内上一版本的 .
    另一种选择是配置所有版本共享的缓存池,例如 memcached 或 redis。
    就我而言,使用 Deployer(软件仍在开发中)我已经能够通过声明这样的任务并将其放入部署主任务中来解决它:

    task('messenger:stop', function () {
    if (has('previous_release')) {
    run('{{bin/php}} {{previous_release}}/bin/console messenger:stop-workers');
    }
    })->desc('Stop workers');

    关于Symfony messenger 工作人员在主管下运行时不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63508798/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com