Почему Laravel использует соединение с очередью по умолчанию, даже если я указал очередь с другим соединением

У меня проблема с очередями laravel. В моем проекте соединение по умолчанию - синхронизация, я хочу добавить соединение sqs для одного типа заданий.

Когда я отправляю работу таким образом:

TestAction::dispatch()->onQueue('test');

Работа выполняется немедленно (через синхронизирующее соединение).

Если я отправлю задание таким образом:

TestAction::dispatch()->onQueue('test')->onConnection('sqsTestAction');

все хорошо.

Очередь "test" находится в соединении sqsTestAction, почему в первом примере задание отправляется через соединение синхронизации?

Моя конфигурация / queue.php:


    'default' => env('QUEUE_CONNECTION', 'sync'),


    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'sqsTestAction' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('AWS_SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => "test",
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
        ],

    ],

Laravel версии 5.8


person mm1492    schedule 06.05.2020    source источник


Ответы (1)


почему в первом примере задание отправляется через синхронизирующее соединение?

Потому что, как видите, он установлен по умолчанию. Измените значение файла .env для QUEUE_CONNECTION на sqsTestAction, и оно станет значением по умолчанию. В ключе по умолчанию файла config / queue второй параметр является резервным параметром на случай, когда значение .env не существует.

person Tpojka    schedule 06.05.2020
comment
Хорошо, я думал, что соединение по умолчанию не поддерживает тестовую очередь, так что это мое недоразумение. Спасибо за ответ - person mm1492; 07.05.2020
comment
Удачного кодирования! #soReadyToHelp - person Tpojka; 07.05.2020