Подтвердить что ты не робот

Amazon SQS Dead Letter Queue: Действительно ли это мертвая буква или яд?

Я пытаюсь выяснить, что именно делает Amazon SQS Dead Letter Queue.

Согласно http://aws.typepad.com/aws/2014/01/amazon-sqs-new-dead-letter-queue.html

Очередь мертвых букв - ARN (имя ресурса Amazon) в очереди SQS, которая будет получать сообщения, которые не были успешно обработаны после максимального количества получает потребителями.

Разве это не похоже на очередность Poision? Основное различие заключается в том, что потребители получили сообщение. Мертвое письмо будет, когда сообщение будет потенциально прекрасным, но не может быть доставлено, возможно, из-за сбоя службы. http://www.eaipatterns.com/DeadLetterChannel.html

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

Шина сообщений и очередь

Является ли шаблон мертвых букв разным значением в контексте простой старой очереди? Поскольку SQS - это просто очередь, а не шина сообщений, она не несет ответственности за доставку сообщений. Вместо этого он ожидает, что сообщения будут подняты (запрошены). Таким образом, традиционный шаблон Dead Letter на самом деле не применяется, поскольку нет шины сообщений, пытающейся доставить сообщение и не сможет найти получателя.

Может ли SQS вести себя как шина сообщений?

Есть ли способ через SQS настроить каналы и прослушиватели вместо явного опроса сообщений из очереди?

4b9b3361

Ответ 1

Хороший вопрос.

На основе определения из канонического источника, который вы цитировали (цитаты удалены для ясности):

Конкретный способ работы канала Dead Letter зависит от конкретной реализации систем обмена сообщениями, если он обеспечивает его вообще. Канал можно назвать "мертвой точкой сообщения" или "мертвой буквой". Как правило, каждая машина, на которой установлена ​​система обмена сообщениями, имеет свой собственный локальный канал "Мертвая лента", поэтому на любом компьютере, на котором умирает сообщение, его можно переместить из одной локальной очереди в другую без каких-либо сетевых неопределенностей. Это также записывает, на какой машине сообщение умерло. Когда система обмена сообщениями перемещает сообщение, она также может записывать исходный канал, на который должно было быть отправлено сообщение.

... неясно, есть ли разница. Я понимаю, что вы подразумеваете под "ядовитой очередью", и ваше понимание того, как работает SQS, звучит. Семантически, разница между DLQ и PQ - "недостижимая" в стиле электронной почты по сравнению с "ядом" - мне непонятна. Возможно, PQ - это аромат DLQ.

FWIW, Политика Redelivery ActiveMQ использует то же определение DLQ - гибридного DLQ/PQ - как это делает SQS.

Может ли SQS вести себя как шина сообщений?

SQS не может, но есть похожие продукты, которые могут.

  • Amazon SNS

    SNS (Simple Notification Service) - это обобщенная система публикации публикаций. SNS позволяет создавать темы, а затем регистрировать подписчиков, которые получают push-уведомления. В настоящее время push-уведомления могут поступать в виде сообщений HTTP/S, электронной почты, SMS, SQS и мобильных устройств.

    SNS имеет довольно разумную политику повтора для HTTP/S, но не поддерживает DLQ или PQ AFAIK.

  • IronMQ Push Queues

    IronMQ - еще одна служба обслуживания очередей REST-ful, которая немного более полно, чем SQS. (Истинное задание FIFO-сообщений, более длительные задержки и т.д., Но, к сожалению, меньшие размеры сообщений.) Push-очереди позволяют вам настроить push-подписчиков, которые затем получают HTTP-POST каждый раз, когда новое сообщение помещается в очередь.

    Если IronMQ не сможет доставить сообщение - HTTP POST истекает, или ваша конечная точка возвращает что-либо, кроме 2xx, то он будет повторять доставку. Если в нем закончится повторная попытка, он отправит сообщение в очередь ошибок - комбинация DLQ и PQ в этом случае.

    Это, вероятно, так близко, как вы собираетесь добраться до истинного "ESB" в управляемой службе.

Конечно, тогда существуют настоящие ESB с открытым исходным кодом и структуры SOA - MULE, ServiceMix и т.д. - но я почти не знаю, что вы пытаетесь сделать, чтобы сделать какие-либо рекомендации там.:)

Ответ 2

В большинстве случаев я не уверен, что необходимо различать DLQ и PQ. На самом деле я считаю это определение довольно произвольным. Для большинства реализаций транзакционных сообщений, если сообщение не будет успешно уничтожено из очереди в указанном количестве повторений, оно переходит к DLQ. Наличие отдельной очереди для искаженных сообщений означает, что теперь у вас есть только два места для поиска ваших сообщений, которые не обрабатываются успешно, две очереди исключений для мониторинга или операционных соображений и некоторый процент сообщений, которые, похоже, могут принадлежать либо очередь (сценарии пакетной обработки приходят на ум).

Ответ 3

Нет, он не будет вести себя как активный ESB. Простая служба очереди по определению проста. Существует гарантия доставки "по крайней мере один раз", но помимо этого она делает очень мало promises.

Он предназначен только для опроса/длительного опроса. У вас может быть несколько очередей, каждая из которых обслуживает другую цель, но одна очередь очень проста и не предназначена для обслуживания нескольких функций или обеспечения расширенной логики. SWF может предоставить то, что вы хотите, но, скорее всего, вам нужно будет внедрить ESB.

http://aws.amazon.com/swf/