brezgalov/yii2-amq-workers-manager

用于从管理面板管理工作者的工具

v1.0.4 2021-11-03 09:40 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:34 UTC


README

该管理器与AMQP队列驱动程序一起工作,因此除了此包依赖项中的"yii2/queue"外,还需要安装传输。

我推荐"enqueue/amqp-lib"。

安装

通过composer安装

composer require brezgalov/yii2-amq-workers-manager --prefer-dist

应用迁移

php yii migrate --migrationPath="vendor/brezgalov/yii2-amq-workers-manager/migrations"

在应用程序中连接组件

$config = [
  'bootstrap' => [
    'workersManager',
    'queue',
  ],
  'components' => [
    'workersManager' => WorkersManagerService::class,
    'queue' => [
      'class' => \yii\queue\amqp_interop\Queue::class,
      'host' => '127.0.0.1',
      'port' => 5672,
      'user' => 'guest',
      'password' => 'guest',
      'queueName' => 'test',
    ],
    ...

应用

在数据库中,在workers_configs表中创建记录

<queue_component_name: 'queue', workers_count: 1>

通过控制台启动工作者处理

php yii workers/manage workersManager

观察在workers_statuses表中出现的工作者。

接下来,将"workers/manage"命令连接到cron/scheduler的合适间隔

为了使工作者状态改变,需要通过cron/scheduler命令定期查询它们

php yii workers/check

搞定!现在,当数据库中工作者的数量发生变化时,管理器将自动停止/启动工作者

任务执行

在创建任务时可以使用AbstractJob类。它允许任务在执行时将is_busy标记设置为工作者的状态。这允许管理器看到当前正在工作的工作者,即使在有必要停止的情况下也不会停止它们(当工作者is_busy = 0时才会停止)

例如

class TestPlaceholderJob extends AbstractJob implements JobInterface
{
    /**
    * @var int
    */
    public $sleep = 10;

    /**
     * @param \yii\queue\Queue $queue
     * @return mixed|void
     */
    public function run($queue)
    {
        sleep($this->sleep);
    }
}