hzted123 / yii2-amqp
AMQP消费者管理工具
1.0.4
2017-05-10 11:59 UTC
Requires
- php: >=5.3.0
- hzted123/yii2-cronjobs: *
- php-amqplib/php-amqplib: ~2.0
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-14 18:47:45 UTC
README
一个用于管理AMQP消费者的工具。它可以配置声明交换和队列。并通过cron作业保持消费者存活。
此扩展基于此。感谢webtoucher。
但是有一些改动
- 通过队列设置消费者,而不是路由或交换
- 所有交换和队列设置都在配置中
- 添加监听管理控制器
安装
安装此扩展的最佳方式是通过composer。
运行以下命令
php composer.phar require --prefer-dist hzted123/yii2-amqp "*"
或者在您的composer.json
文件的require部分添加
"hzted123/yii2-amqp": "*"
。
用法
扩展安装后,只需在代码中简单使用即可
在控制台配置中添加以下内容
return [ ... 'components' => [ ... 'amqp' => [ 'class' => 'hzted123\amqp\components\Amqp', 'host' => '******', 'port' => 5672, 'user' => '******', 'password' => '******', 'vhost' => '/', 'exchange_configs' => [ 'exchange_name' => [ 'options' => ['type' => 'topic', 'passive' => false, 'auto_delete' => false, 'durable' => true ], ], ... ... ], 'queue_configs' => [ 'queue_name' => [ 'options' => ['passive' => false, 'auto_delete' => false, 'durable' => true, 'exclusive' => false], 'arguments' => ['x-max-length' => ['I', 1000000], 'x-max-length-bytes' => ['I', 300485760]], 'binds' => ['route' => 'exchange_name'] ], ... ... ], ], ], ... 'controllerMap' => [ 'cron' => [ 'class' => 'mitalcoi\cronjobs\CronController', 'interpreterPath' => '/usr/bin/php', 'logsDir' => '/data/logs/cron', 'logFileName' => '%L/php-%C.%A.%D.log', 'bootstrapScript' => (dirname(dirname(__FILE__)) .'/yii', 'cronJobs' =>[ 'listener-manage/keep' => [ 'cron' => '* * * * *', ] ], ], 'listener' => [ 'class' => 'hzted123\amqp\controllers\AmqpListenerController', 'interpreters' => [ 'queue_name' => '@app\components\DemoEventInterpreter', // interpreters for each queue ], ], 'listener-manage' => [ //consumer keeper 'class' => 'hzted123\amqp\controllers\ListenerManageController', 'configs' => [ ['queue' => 'queue_name', 'count' => 2] // Keeping the number of consumers ] ], ], ];
添加消息解释器类@app/components/DemoEventInterpreter
以及不同路由键的处理程序
<?php namespace app\components; use hzted123\amqp\components\AmqpInterpreter; class DemoEventInterpreter extends AmqpInterpreter { /** * Interprets AMQP message with routing key 'hello_world'. * * @param array $message */ public function readHelloWorld($message) { // todo: write message handler $this->log(print_r($message, true)); } }
用法
只需运行以下命令即可启动所有消费者
$ php yii listener-manage keep
或这样
* * * * * php yii listener-manage keep
运行以下命令
$ php yii listener-manage kill
在部署新代码时杀死所有消费者
运行以下命令
$ php yii listener --queue=queue_name
来监听选定队列
您还可以根据需要创建控制器。只需使用hzted123\amqp\controllers\AmqpConsoleController
代替yii\web\Controller
作为您的web控制器类,并使用hzted123\amqp\controllers\AmqpConsoleController
代替yii\console\Controller
作为您的控制台控制器类。AMQP连接将在connection
属性中可用。AMQP通道将在channel
属性中可用。
注意:从版本1.0.2开始,配置信息,包括交换和路由切换位置,对于多个路由绑定到一个队列
'queue_configs' => [ 'queue_name' => [ 'options' => ['passive' => false, 'auto_delete' => false, 'durable' => true, 'exclusive' => false], 'arguments' => ['x-max-length' => ['I', 1000000], 'x-max-length-bytes' => ['I', 300485760]], 'binds' => ['route' => 'exchange_name'] ], ... ... ],