Почему MaxAttemptsExceededException - PullRequest
0 голосов
/ 08 ноября 2019

Я не думаю, что понимаю систему очередей Laravel.

Я внедрил Redis (базовая конфигурация) и выполняю очень простое тестирование, но эта ошибка MaxAttemptsExceededException вызывает у меня много путаницы.

Идея этого "теста" заключается в том, чтобы просто запустить контроллер через браузер, и, когда контроллер работает, он "отправляет" задание внутри цикла for. В этом тесте я стремлюсь отправлять 1 электронное письмо каждые 25 секунд, я представляю, что при каждом запуске контроллера электронные письма «складываются».

Сначала все запускается, но внезапно php artisan queue:work сообщает об ошибке.

Смысл:

  • В чем причина этого тайм-аута? Это задержка Redis?
  • Правильно ли использовать этот параметр queue:work --tries=3?
  • Могу ли я изменить какие-либо настройки?

enter image description here

.ENV

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_CONNECTION=default

CONFIG / DATABASE.PHP

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

CONFIG / SESSION.PHP

'connection' => env('SESSION_CONNECTION', null),

МОЙ КОНТРОЛЛЕР

        for ($i = 1; $i <= 5; $i++)
        {
            $when = now()->addSeconds(25 * $i);

            $mykey = 'KEY--' . $i . '--' . $when->toDateTimeString();

            dispatch(new TestRedisJob($mykey));
        }

MY JOB CLASS (TestRedisJob)

    public function handle(Redis $redis)
    {
        Redis::throttle('email')->allow(1)->every(25)->then(function ()
        {
            \Mail::to('customer@domain.com')
                ->send(new OrderShipped('contato@fiscalizo.com.br', $this->mykey));

        }, function() {
            return $this->release(25);
        });

МОЙ ПОЧТОВЫЙ КЛАСС (OrderShipped)

    public function build()
    {
        return $this
            ->from($this->emailFrom)
            ->subject("Registro Efetivado: " . $this->emailSubject)
            ->view('emails.welcome');

1 Ответ

0 голосов
/ 08 ноября 2019

удалить Redis $redis инъекцию

public function handle()
{
    Redis::throttle('email')->allow(1)->every(25)->then(function ()
    {
        \Mail::to('customer@domain.com')
            ->send(new OrderShipped('contato@fiscalizo.com.br', $this->mykey));
     }, function() {
        return $this->release(25);
    });
...