Как использовать событие Yii2 Queue :: EVENT_AFTER_ERROR - PullRequest
0 голосов
/ 17 марта 2019

Я использую расширение очереди Yii2.

Я хочу добавить обработчик ошибок после запуска события ошибки в задании.

Это моя модель:

namespace app\models;

use Yii;
use yii\base\BaseObject;
use yii\queue\JobInterface;
use yii\queue\Queue;

class AddTransaction extends BaseObject implements JobInterface
{
    public function execute($queue)
    {
        $test = new League();
        $test->title_fa = 'تست';
        $test->title_en = 'test';
        $test->status = 1;
        $test->country_id = 3;
        $test->created = time();
        $test->save();
    }
}

Это мое действие:

public function actionTest()
{
    if (Yii::$app->queue->delay(5)->push(new AddTransaction())) {
        echo "ok";
    } else {
        echo "error";
    }
}

Где использовать этот код?

Yii::$app->queue->on(Queue::EVENT_AFTER_ERROR, function (ErrorEvent $event) {
     if ($event->job instanceof SomeJob) {
         $event->retry = ($event->attempt < 5) && ($event->error instanceof TemporaryException);
     }
});

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Вы можете добавить это в массив конфигурации очереди:

'components' => [
    // ...
    'queue' => [
        // ...
        'on afterError' => function (ExecEvent $event) {
            if ($event->job instanceof SomeJob) {
                $event->retry = ($event->attempt < 5) && ($event->error instanceof TemporaryException);
            }
        },
    ],
],
0 голосов
/ 17 марта 2019

В расширенном шаблоне у вас есть конфигурационный файл bootstrap.php, где вы можете подписаться на события и т. Д.

Это один из принятых примеров из документов

Event::on(Queue::className(), Queue::EVENT_AFTER_ERROR, function ($event) {
    Yii::debug(get_class($event->sender) . ' is error');
});
...