femike / yii2-amqp-rrobin
基于 AMQP 的 Yii 2 扩展,用于通过 AMQP 与 RabbitMQ 服务器通信。基于 videlalvaro/php-amqplib,并从 webtoucher/yii2-amqp 分支出来,支持轮询
v1.0.1
2016-06-10 17:42 UTC
Requires
- php: >=5.3.0
- php-amqplib/php-amqplib: ~2.0
- webtoucher/yii2-commands: *
This package is not auto-updated.
Last update: 2024-09-23 14:39:55 UTC
README
AMQP 扩展包装器,用于与 RabbitMQ 服务器通信。基于 videlalvaro/php-amqplib。
安装
安装此扩展的最佳方式是通过 composer。
运行以下命令:
$ php composer.phar require femike/yii2-amqp-rrobin "*"
或者
"femike/yii2-amqp-rrobin": "*"
将以下内容添加到您的 composer.json
文件的 require
部分:
在您的控制台配置中添加以下内容:
return [ ... 'components' => [ ... 'amqp' => [ 'class' => 'webtoucher\amqp\components\Amqp', 'host' => '127.0.0.1', 'port' => 5672, 'user' => 'your_login', 'password' => 'your_password', 'vhost' => '/', ], ... ], ... 'controllerMap' => [ ... 'rabbit' => [ 'class' => 'webtoucher\amqp\controllers\AmqpListenerController', 'interpreters' => [ 'my-exchange' => 'app\components\RabbitInterpreter', // interpreters for each exchange ], 'exchange' => 'my-exchange', // default exchange ], ... ], ... ];
添加消息解释器类 @app/components/RabbitInterpreter
,并为不同的路由键添加您的处理程序
<?php namespace app\components; use webtoucher\amqp\components\AmqpInterpreter; class RabbitInterpreter 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 rabbit
以监听默认交换机上的任何路由键的主题
$ php yii rabbit my_routing_key
或者监听一个路由键的主题
运行以下命令:
$ php yii rabbit my_routing_key direct --exchange=my_exchange
以监听选定交换机上的直接消息
您还可以创建满足您需求的控制器。只需将您的 Web 控制器类 webtoucher\amqp\controllers\AmqpConsoleController
用于代替 yii\web\Controller
,并将您的控制台控制器类 webtoucher\amqp\controllers\AmqpConsoleController
用于代替 yii\console\Controller
。AMQP 连接将通过属性 connection
可用。AMQP 通道将通过属性 channel
可用。
轮询示例使用
<?php namespace console\controllers; use webtoucher\amqp\components\Amqp; use Yii; use yii\console\Controller; class ExampleController extends Controller { public function actionIndex($message = 'Wasap Man') { Yii::$app->amqp->send('my-exchange', 'HelloWorld', $message, Amqp::TYPE_DIRECT, true); } }
运行相同的监听消费者
1st$ php yii rabbit HelloWorld direct true
2nd$ php yii rabbit HelloWorld direct true
从控制台控制器发送消息
$ php yii example
或者
$ php yii example "same text"