DB дравер для хранения очереди заданий использует базу данных.
Пример настройки:
return [
'bootstrap' => [
'queue', // Компонент регистрирует свои консольные команды
],
'components' => [
'db' => [
'class' => \yii\db\Connection::class,
// ...
],
'queue' => [
'class' => \yii\queue\db\Queue::class,
'db' => 'db', // Компонент подключения к БД или его конфиг
'tableName' => '{{%queue}}', // Имя таблицы
'channel' => 'default', // Выбранный для очереди канал
'mutex' => \yii\mutex\MysqlMutex::class, // Мьютекс для синхронизации запросов
],
],
];
В базу данных нужно добавить таблицу. Схема, на примере MySQL:
CREATE TABLE `queue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel` varchar(255) NOT NULL,
`job` blob NOT NULL,
`pushed_at` int(11) NOT NULL,
`ttr` int(11) NOT NULL,
`delay` int(11) NOT NULL DEFAULT 0,
`priority` int(11) unsigned NOT NULL DEFAULT 1024,
`reserved_at` int(11) DEFAULT NULL,
`attempt` int(11) DEFAULT NULL,
`done_at` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `channel` (`channel`),
KEY `reserved_at` (`reserved_at`),
KEY `priority` (`priority`)
) ENGINE=InnoDB
Миграции смотрите в src/drivers/db/migrations.
Расширение предлагает использовать миграции с неймспейсами. Чтобы добавить их в ваше приложение отредактируйте консольный конфиг:
'controllerMap' => [
// ...
'migrate' => [
'class' => 'yii\console\controllers\MigrateController',
'migrationPath' => null,
'migrationNamespaces' => [
// ...
'yii\queue\db\migrations',
],
],
],
Затем запустите команду:
yii migrate/up
Для обработки очереди используются консольные команды.
yii queue/listen [timeout]
Команда listen
запускает обработку очереди в режиме демона. Очередь опрашивается непрерывно.
Если добавляются новые задания, то они сразу же извлекаются и выполняются. timeout
- время
ожидания в секундах перед следующим опросом очереди. Способ наиболее эфективен если запускать
команду через supervisor или systemd.
yii queue/run
Команда run
в цикле извлекает задания из очереди и выполняет их, пока очередь не опустеет, и
завершает свою работу. Это способ подойдет для обработки очереди заданий через
cron.
Для команд run
и listen
доступны следующие опции:
--verbose
, -v
: состояние обработки заданий выводится в консоль.--isolate
: каждое задание выполняется в отдельном дочернем процессе.--color
: подсветка вывода в режиме --verbose
.yii queue/info
Команда info
выводит инофрмацию о состоянии очереди.
yii queue/clear
Команда clear
делает полную очистку очереди.
yii queue/remove [id]
Команда remove
удаляет задание из очереди.