Задать вопрос
@EVOSandru6

Почему в yii2 очередях отрабатывают только триггеры: Queue::EVENT_BEFORE_PUSH и Queue::EVENT_AFTER_PUSH?

Добрый день,

Сконфигурировал поддержку очердей как в документации:

https://github.com/yiisoft/yii2-queue

Сами очереди отрабатывают нормально. В качестве драйвера указал 'db' и создал mysql таблицу как в доке

Далее в основах:

https://github.com/yiisoft/yii2-queue/blob/master/...

Пытаюсь слушать события. Мне Интереснее всего следить за:

Queue::EVENT_AFTER_EXEC
ExecEvent
После каждого успешного выполнения задания


Но не могу в него попасть хотя очередь отабатывает успешно.

./yii queue/listen --color --verbose --isolate
----------------------
2018-10-09 14:43:10 [156] common\jobs\DownloadJob (attempt: 1, pid: 4297) - Started
2018-10-09 14:43:11 [156] common\jobs\DownloadJob (attempt: 1, pid: 4297) - Done (0.379 s)

Ловлю:

EVENT_BEFORE_PUSH
EVENT_AFTER_PUSH

Не ловлю:

EVENT_BEFORE_EXEC
EVENT_AFTER_EXEC
EVENT_AFTER_ERROR
EVENT_WORKER_START
EVENT_WORKER_LOOP
EVENT_WORKER_STOP

Пример отлова:

$afterExecAlert = function($event) {
            throw new \Exception('Hurra - EVENT_AFTER_EXEC');
        };
Yii::$app->queue->on(Queue::EVENT_AFTER_EXEC, $afterExecAlert);

Yii::$app->queue->push(new DownloadJob([
            'url' => 'https://picsum.photos/200/500',
            'file' => $full_path,
        ]));


Config:

'queue' => [
            'class' => \yii\queue\db\Queue::class,
            'db' => 'db', // DB connection component or its config
            'tableName' => '{{%queue}}', // Table name
            'channel' => 'default', // Queue channel key
            'mutex' => \yii\mutex\MysqlMutex::class, // Mutex used to sync queries
            'as log' => \yii\queue\LogBehavior::class
        ],


Подскажите пожалуйста в чем причина?
  • Вопрос задан
  • 1881 просмотр
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Zhuravljov
@Zhuravljov
php-программист
Отправка и получение сообщений происходит в разных процессах. Вы вешаете обработчик EVENT_AFTER_EXEC в процессе, который отправляет сообщения. Воркер-процесс про это ничего не знает, а именно он триггерит EVENT_AFTER_EXEC.

Оформите обработчик события в виде Behavior-а ( по типу LogBehavior), и подключите его в общий конфиг. Это решит проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы