Я использую Laravel Jobs для чтения сообщений из очереди SQS (Laravel версия 5.7)
После Laravel показания Я использую супервизор для запуска нескольких queue:work
процессы одновременно.
Все идет хорошо, пока я не получу эту ошибку SQS, связанную с доступностью сообщения:
InvalidParameterValue (client): Value
... for parameter ReceiptHandle is invalid. Reason: Message does not exist or
is not available for visibility timeout change. - <?xml version="1.0"?>
<ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error>
<Type>Sender</Type><Code>InvalidParameterValue</Code><Message>Value ...
for parameter ReceiptHandle is invalid. Reason: Message does not exist or is
not available for visibility timeout change.</Message><Detail/></Error>
<RequestId>8c1d28b7-a02c-5059-8b65-7c6292a0e56e</RequestId></ErrorResponse>
{"exception":"[object] (Aws\\Sqs\\Exception\\SqsException(code: 0): Error
executing \"ChangeMessageVisibility\" on \"https://sqs.eu-central-
1.amazonaws.com/123123123123/myQueue\"; AWS HTTP error: Client error: `POST
https://sqs.eu-central-1.amazonaws.com/123123123123/myQueue` resulted in a
`400 Bad Request` response:
В частности, странная вещь Message does not exist or is not available for visibility timeout change.
Каждый процесс супервизора вызывает command=php /home/application/artisan queue:work
без --sleep=3
(Я бы хотел, чтобы процесс был реактивным и не ожидал 3 секунды, если в очереди ничего не было), ни --tries=3
(Мне нужно, чтобы все задачи были выполнены, поэтому я не ограничиваю tries
параметр)
Если сообщение не существует (и я не могу исключить эту возможность), почему процесс извлекает его из очереди? Что я могу сделать, чтобы предотвратить это?
Задача ещё не решена.
Других решений пока нет …