Extension Yii2 for working with AMQP protocol
Via composer
composer require "starcode/yii2-amqp:2.*"
or add composer.json
{
"require": {
"starcode/yii2-amqp": "2.*"
}
}
Create amqp component config
[
'components' => [
'amqp' => [
'class' => 'starcode\amqp\components\Connection',
'host' => 'localhost',
'user' => 'guest',
'password' => 'guest',
'connectionOptions' => [
'vhost' => '/',
],
'queuesConfig' => [
'email' => [
'queue' => 'email',
'durable' => true,
'auto_delete' => false,
],
'logs' => [
'queue' => 'logs',
'durable' => true,
'auto_delete' => false,
],
],
],
],
];
Publish message.
// get queue object
$queue = Yii::$app->get('amqp')->getQueue('email');
// create message object
$message = new Message('my message', ['delivery_mode' => 2]);
// publish message
$queue->publish($message);
Listen messages
// get queue object
$queue = Yii::$app->get('amqp')->getQueue('email');
// callback listener function
$callback = function($message) {
echo $message->body;
// acknowledge message
$channel = $msg->delivery_info['channel'];
$channel->basic_ack($msg->delivery_info['delivery_tag']);
};
$queue->consume([
'callback' => $callback,
]);
$channel = $queue->getChannel();
while (count($channel->callbacks)) {
$channel->wait();
}