yii2-amqp
AMQP extension wrapper to communicate with RabbitMQ server. Based on php-amqplib/php-amqplib., (*1)
Installation
The preferred way to install this extension is through composer., (*2)
Either run, (*3)
$ php composer.phar require webtoucher/yii2-amqp "*"
or add, (*4)
"webtoucher/yii2-amqp": "*"
to the require
section of your composer.json
file., (*5)
Add the following in your console config:, (*6)
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
],
...
],
...
];
Add messages interpreter class @app/components/RabbitInterpreter
with your handlers for different routing keys:, (*7)
<?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));
}
}
Usage
Just run command, (*8)
$ php yii rabbit
to listen topics with any routing keys on default exchange or, (*9)
$ php yii rabbit my_routing_key
to listen topics with one routing key., (*10)
Run command, (*11)
$ php yii rabbit my_routing_key direct --exchange=my_exchange
to listen direct messages on selected exchange., (*12)
Also you can create controllers for your needs. Just use for your web controllers class
webtoucher\amqp\controllers\AmqpConsoleController
instead of yii\web\Controller
and for your console controllers
class webtoucher\amqp\controllers\AmqpConsoleController
instead of yii\console\Controller
. AMQP connection will be
available with property connection
. AMQP channel will be available with property channel
., (*13)