DB драйвер

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 удаляет задание из очереди.