zorn-v/messenger-supervisor-bundle

symfony messenger 的 supervisor:消费命令

v1.0.1 2020-01-29 15:52 UTC

This package is auto-updated.

Last update: 2024-08-29 05:18:48 UTC


README

受 laravel horizon 启发,用于 messenger:consume 命令的 supervisor。

使用配置中的参数运行 messenger:consume 命令,并监控这些命令的运行情况,如果需要则启动它们。

安装

composer require zorn-v/messenger-supervisor-bundle

用法

./bin/console messenger:supervisor

问题

如果你使用 SIGKILL 信号杀死主 supervisor 进程,它无法关闭消费者,并且在重启后会启动它们的副本。你应该使用 SIGTERM 来杀死 supervisor。

配置

在配置中,所有参数的名称都与 messenger:consume 参数的名称相同。你可以通过 ./bin/console messenger:consume --help 来检查。

还可以查看 symfony 文档中关于最佳实践的内容 https://symfony.com.cn/doc/current/messenger.html#deploying-to-production

# config/packages/messenger_supervisor.yaml
messenger_supervisor:
    queue-1: ~
    queue-2:
        receivers: [in_memory]
        memory-limit: 128M
        time-limit: 3600
        limit: 1000
        sleep: 1
        bus: mybus
    queue-3:
        limit: 100

部署

你还需要在系统 supervisor 中设置 messenger:supervisor 以自动启动此命令,并通过类似 service messenger-supervisor restart 的命令来管理它。

systemd

systemd 是大多数 Linux 发行版的标准 init 系统。在 /etc/systemd/system 目录中创建单元文件。

#/etc/systemd/system/messenger-supervisor.service

[Unit]
Description=Symfony messenger supervisor
After=network.target

[Service]
Type=exec
User=www-data
Restart=always
ExecStart=/path/to/your/app/bin/console messenger:supervisor

[Install]
WantedBy=multi-user.target

如果需要,将 User 更改为你的服务器上的 Unix 用户。现在告诉 systemd 关于新单元的信息,启用它在系统启动时运行,并运行它。

$ sudo systemctl daemon-reload
$ sudo systemctl enable messenger-supervisor
$ sudo systemctl start messenger-supervisor

supervisord

例如,你可以在 Ubuntu 上通过以下方式安装它:

$ sudo apt-get install supervisor

Supervisor 配置文件通常位于 /etc/supervisor/conf.d 目录中。例如,你可以创建一个新的 messenger-supervisor.conf 文件。

#/etc/supervisor/conf.d/messenger-supervisor.conf

[program:messenger-supervisor]
command=/path/to/your/app/bin/console messenger:supervisor
user=www-data
numprocs=1
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d

如果需要,将 user 更改为你的服务器上的 Unix 用户。接下来,告诉 Supervisor 读取你的配置并启动你的工作进程。

$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start messenger-supervisor

有关更多信息,请参阅 Supervisor 文档