brezgalov / yii2-amq-workers-manager
用于从管理面板管理工作者的工具
v1.0.4
2021-11-03 09:40 UTC
Requires
- php: >=7.2.0
- yiisoft/yii2: >=2.0.14
- yiisoft/yii2-queue: ^2.3
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);
}
}