Laravel Job Queue не обрабатывается с помощью драйвера Redis

Я создаю задание, помещаю его в пользовательскую очередь и пытаюсь использовать драйвер Redis для обработки задания, когда оно попадает в очередь, но безуспешно:

class MyController extends Controller {
public function method() {
$job = (new UpdateLiveThreadJob())->onQueue('live');
$this->dispatch($job);
}
}

Вот мой конфиг очереди:

    'default' => env('QUEUE_DRIVER'),

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue'  => 'default',
'expire' => 60,
],

Вот мой .env файл:

# Drivers (Queues & Broadcasts)
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=redis
BROADCAST_DRIVER=redis

Вот моя работа:

class UpdateLiveThreadJob extends Job implements SelfHandling, ShouldQueue
{
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}

/**
* Execute the job.
*
* @return void
*/
public function handle()
{
// Rerender content
$templatedOutput = view('templates.livethreadcontents')->with([
'updates' => collect(Redis::lrange('live:updates', 0, -1))->reverse()->map(function($update) {
return json_decode($update);
})
])->render();

// Connect to external service

// Update Thread
}
}

Действительно, я могу изменить handle метод ничего не делать, чтобы убедиться, что в работе ничего не происходит, что фактически приводит к сбою, и он по-прежнему не обрабатывается:

    /**
* Execute the job.
*
* @return void
*/
public function handle()
{
print_r('test');
}

Используя Redis, я вижу, что он помещен в очередь:

> lrange queues:live 0 -1
> // json encoded job present
> llen queues:live
> // shows there is a job in the queue

Тем не менее, это никогда не срабатывает, насколько мне известно. наблюдение php artisan queue:listen ничего не показывает (только несвязанные трансляции событий). Что тут происходит?

5

Решение

Вы помните, чтобы бежать php artisan queue:listen --queue=live?

Вам нужно определить имя очереди при запуске команды прослушивания, в противном случае вы в конечном итоге только слушаете default очередь.

Если вы хотите запустить несколько очередей и управлять вещами в производстве, вы можете использовать что-то вроде Выскочка (не имеет прямого отношения к настройке очередей Laravel, но обеспечивает хорошую отправную точку) или Руководитель управлять процессами. Оба из них доступны в Forge и Homestead.

Наконец, предполагая, что вы находитесь на Laravel 5, вы можете рассмотреть возможность запуска php artisan queue:work --daemon --queue=live так как это снижает нагрузку на ЦП при запуске работника, так как он не перезагружает платформу при каждом задании. Но вы должны помнить, чтобы перезапустить работника при развертывании нового кода для ваших заданий, в противном случае ничего не получится.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]