ecommit/messenger-supervisor-bundle

使用 symfony/messenger 与 Supervisor

v1.2.0 2023-12-23 19:06 UTC

This package is auto-updated.

Last update: 2024-09-21 18:32:18 UTC


README

EcommitMessengerSupervisorBundle 包(用于 Symfony)用于管理 Messenger 组件Supervisor

Tests

可用功能

  • 启动 Supervisor 程序(工作进程)
  • 停止 Supervisor 程序(工作进程)
  • 显示 Supervisor 程序(工作进程)状态
  • 以 Nagios 格式显示 Supervisor 程序(工作进程)状态
  • 工作进程失败后
    • 停止 Supervisor 程序(可以禁用)
    • 发送电子邮件(可以禁用)

安装

使用 Composer 安装包:在您的项目目录中,执行以下命令

$ composer require ecommit/messenger-supervisor-bundle

在您的项目的 config/bundles.php 文件中启用包

return [
    //...
    Ecommit\MessengerSupervisorBundle\EcommitMessengerSupervisorBundle::class => ['all' => true],
    //...
];

在 Supervisor 配置中启用 API 并添加您的工人(更多信息请参阅 Supervisor 文档

;eg in /etc/supervisor/conf.d/myconf.conf
[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123

[program:program_async]
command=php /path/to/your/app/bin/console messenger:consume async
process_name=%(program_name)s_%(process_num)02d
numprocs=1
autostart=true
autorestart=true
user=ubuntu

;You can define others programs (workers) :
;[program:program_async2]
;command=php /path/to/your/app/bin/console messenger:consume async2
;process_name=%(program_name)s_%(process_num)02d
;numprocs=2
;autostart=true
;autorestart=true
;user=ubuntu

配置 Messenger(更多信息请参阅 文档)和 Mailer(更多信息请参阅 文档)。

在您的项目中添加配置文件 config/packages/ecommit_messenger_supervisor.yaml

ecommit_messenger_supervisor:
    supervisor:
        #Supervisor API configuration
        host: '127.0.0.1' #IP address - Required
        username: user #Username - Not required - Default value: null
        password: 123 #Password - Not required - Default value: null
        #port: 9001 #Port - Not required - Default value: 9001
        #timeout: 3600 #API timeout (in seconds) - Not required - Default value: 3600

    #Transports / Programs configuration :
    #Mapping "Messenger transport name" -> "Supervisor program name (group name)"
    transports:
        async: program_async #async = Messenger transport name | program_async = Supervisor program (group) name
        #Or you can set options :
        #async:
        #   failure:
        #       stop_program: true #Stop program after failure - Not required - Available values: "always", "will-not-retry" (only if the message cannot be retried), "never" - Default value : "always"
        #       send_mail: true #Send mail after failure - Not required - Available values: "always", "will-not-retry" (only if the message cannot be retried), "never" - Default value : "always"

        #You can define others programs :
        #async2: program_async2

    #Mailer configuration
    mailer:
        from: from@domain.com #Sender - Required if a program is setting with send_mail=true option
        to: to@domain.com #Recipient - Required if a program is setting with send_mail=true option
        #You can use multiple recipients:
        #to: ['to1@domain.com', 'to2@domain.com']
        #subject: "[Supervisor][<server>][<program>] Error" #Suject - Not required - Default value : "[Supervisor][<program>] Error"
        #<program> is replaced by Supervisor program (group) name
        #<server> is replaced by server name

使用方法

#Start a program
php bin/console ecommit:supervisor start program_async
#Start multiple programs
php bin/console ecommit:supervisor start program_async program_async2
#Start all programs
php bin/console ecommit:supervisor start  all


#Stop a program
php bin/console ecommit:supervisor stop program_async
#Stop many programs
php bin/console ecommit:supervisor stop program_async program_async2
#Stop all programs
php bin/console ecommit:supervisor stop  all


#Get status on a single program
php bin/console ecommit:supervisor status program_async
#Get status on multiple programs
php bin/console ecommit:supervisor status program_async program_async2
#Get status on all programs
php bin/console ecommit:supervisor status all
#Use can use Nagios format
php bin/console ecommit:supervisor status all --nagios

您还可以使用 Ecommit\MessengerSupervisorBundle\Supervisor\Supervisor 服务

use Ecommit\MessengerSupervisorBundle\Supervisor\Supervisor;

class MyClass
{
    protected $supervisor;
    
    public function __construct(Supervisor $supervisor) //Supervisor service is injected
    {
        $this->supervisor = $supervisor;
    }

    public function myMethod(): void
    {
        //$this->supervisor->startProgram('program_async');
        //$this->supervisor->stopProgram('program_async');
        //$status = $this->supervisor->getProgramsStatus(['program_async']);
    }
}

许可证

此包可在 MIT 许可证下使用。有关完整许可证,请参阅 LICENSE 文件。