Создание DLQ в SQS

Что это такое?

Мертвые очереди сообщений, оказывается, являются очередями, но с другой целью. Эта очередь будет принимать сообщения, которые не были обработаны в исходной очереди.

Справочная информация

Обычно, когда потребитель иногда пытается обработать сообщение и по какой-то причине ему это не удается, сообщение возвращается в очередь. И цикл попыток чтения повторяется, а для обработки других сообщений в очереди идеальным вариантом является перенаправление сообщений, имеющих какую-либо проблему.

Классическим примером является модель сообщения, производитель сообщения создал модель, отличную от той, которую ожидает потребитель.

В SQS мы можем контролировать это перенаправление, настраивая, какая очередь используется в качестве DLQ и максимальное количество попыток чтения для перенаправления сообщения.

Использование DLQ сильно варьируется в зависимости от брокера / MOM, который мы используем, в этой статье мы только объясним, как действовать, используя SQS.

ПРИМЕР

Пример того, как мы выполняем создание DLQ с помощью команды AWS CLI, в примере ниже я использую Localstack локально:

Сначала создадим очередь с помощью AWS CLI, которая будет нашей DLQ:

aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name aviso_dlq
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь мы создадим основную очередь для получения сообщений, а затем настроим для нее параметры DLQ:

aws sqs create-queue --queue-name aviso 
    --attributes '{"RedrivePolicy": "{"deadLetterTargetArn":"arn:aws:sqs:sa-east-1:000000000000:aviso_dlq","maxReceiveCount":"4"}"}' 
    --endpoint-url=http://localhost:4566
Войдите в полноэкранный режим Выход из полноэкранного режима

Обратите внимание, что мы настроили deadLetterTargetArn и maxReceiveCount, первый параметр указывает ARN-адрес очереди, которую мы создали для DLQ, а второй параметр указывает максимальное количество, которое мы можем попытаться прочитать сообщение.

Пример команды, которую я выполнил для запроса через AWS CLI адреса ARN, также служит для запроса любого другого атрибута очереди:

aws --endpoint-url=http://localhost:4566 sqs get-queue-attributes --queue-url http://localhost:4566/000000000000/aviso_dlq --attribute-names All
Войдите в полноэкранный режим Выход из полноэкранного режима

Разрешительная политика Redrive

AWS SQS имеет функцию, которая позволяет перенаправлять сообщения из очереди DLQ в очередь источника или другую очередь, чтобы они действительно могли быть обработаны потребителем.
Эта функция по-прежнему ограничена только консолью AWS, но предотвращает создание дополнительной обработки для выполнения этого потока.

Оцените статью
devanswers.ru
Добавить комментарий