Не работают события в очереди

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Dreammaker
Сообщения: 139
Зарегистрирован: 2009.09.02, 16:21
Откуда: Черкассы, Украина

Не работают события в очереди

Сообщение Dreammaker » 2018.06.13, 02:16

Здравствуйте, форумчане!

Вот такой кусок кода.

Код: Выделить всё

$tag = $answer->getText();
                $this->ask('Please describe the channel', function (Answer $answer) use ($tag) {
                    $data = ['tag' => $tag, 'token' => $this->bot->getUser()->getId(), 'text' => $answer->getText()];
                    Yii::$app->queue->push(new CreateChannel(['data' => $data]));
                    Yii::$app->queue->on(\yii\queue\redis\Queue::EVENT_AFTER_EXEC, function ($event) {
                        echo 'asasdasdasd';
                        //$conversation->say('The channel was created');
                    });
                    $this->say('The channel is sent to the creation queue and will be created soon');
                });
Если вкратце - это кусок файла беседы Botman'а. Пытаемся использовать очереди Yii для создания канала. Очередь сама по себе работает, но вот функция при событии окончания выполнения задачи не вызывается (точнее, если запустить verbose режим, то в консоли можно увидеть сообщение с Done, но наша функция не выполняется). При это последнее сообщение 'The channel is sent to the creation queue and will be created soon' приходит в браузер.

Подскажите, пожалуйста, как можно решить данную проблему, то есть, как можно повесить на событие свой обработчик?

Dreammaker
Сообщения: 139
Зарегистрирован: 2009.09.02, 16:21
Откуда: Черкассы, Украина

Re: Не работают события в очереди

Сообщение Dreammaker » 2018.06.13, 10:17

Update: скорее всего, проблема не в очередях. Подобрали проверку, которая показала, что в функция все же выполняется при наступлении события.

Dreammaker
Сообщения: 139
Зарегистрирован: 2009.09.02, 16:21
Откуда: Черкассы, Украина

Re: Не работают события в очереди

Сообщение Dreammaker » 2018.06.16, 11:58

Добавлю на будущее тем, кто столкнётся с данной проблемой. Причина все же в очередях, а точнее в понимании как они работают.

Если посмотреть пример кода выше, то в данной ситуации самого исполнения работы не происходит, работа будет идти в воркере, соответственно, и событие мы не можем перехватить. Это событие очереди и его нужно привявязывать или в работе, или же как поведение к классу очереди в конфиге.

Ответить