Драйвер работает с очередью RabbitMQ.
Чтобы он работал в проект нужно добавить amqp interop транспорт, например пакет enqueue/amqp-lib.
Возможности:
vhost
, connection_timeout
, qos_prefetch_count
и т.д.amqp:
, amqps:
или amqp://user:pass@localhost:1000/vhost
Пример конфига:
return [
'bootstrap' => [
'queue', // Компонент регистрирует свои консольные команды
],
'components' => [
'queue' => [
'class' => \yii\queue\amqp_interop\Queue::class,
'port' => 5672,
'user' => 'guest',
'password' => 'guest',
'queueName' => 'queue',
'driver' => yii\queue\amqp_interop\Queue::ENQUEUE_AMQP_LIB,
// или
'dsn' => 'amqp://guest:guest@localhost:5672/%2F',
// или
'dsn' => 'amqp:',
],
],
];
Для обработки очереди используются консольные команды.
yii queue/listen
Команда listen
запускает обработку очереди в режиме демона. Очередь опрашивается непрерывно.
Если добавляются новые задания, то они сразу же извлекаются и выполняются. Способ наиболее эфективен
если запускать команду через supervisor или systemd.
Для команды listen
доступны следующие опции:
--verbose
, -v
: состояние обработки заданий выводится в консоль.--isolate
: каждое задание выполняется в отдельном дочернем процессе.--color
: подсветка вывода в режиме --verbose
.Для отправки произвольных заголовков в очередь, вместе с сообщением, можно использовать атрибут setMessageHeaders
.
Например:
$queue = Yii::$app->queueTest;
$queue->setMessageHeaders = [
'header1' => 'header-value1',
'header2' => 'header-value2',
];
$queue->push(new TestJob());
Обратите внимание! Существующие заголовки не будут перезаписаны по умолчанию.