Я не думаю, что понимаю систему очередей Laravel.
Я внедрил Redis (базовая конфигурация) и выполняю очень простое тестирование, но эта ошибка MaxAttemptsExceededException
вызывает у меня много путаницы.
Идея этого "теста" заключается в том, чтобы просто запустить контроллер через браузер, и, когда контроллер работает, он "отправляет" задание внутри цикла for
. В этом тесте я стремлюсь отправлять 1 электронное письмо каждые 25 секунд, я представляю, что при каждом запуске контроллера электронные письма «складываются».
Сначала все запускается, но внезапно php artisan queue:work
сообщает об ошибке.
Смысл:
- В чем причина этого тайм-аута? Это задержка Redis?
- Правильно ли использовать этот параметр
queue:work --tries=3
? - Могу ли я изменить какие-либо настройки?
.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');