Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Темы
Тема SNS доставляет копию каждого сообщения в каждую подписанную на неё очередь, а каждую очередь затем читают как любую другую.
Схема текстом
- Издатель SnsPublish → Тема orders-events копия на каждую подписку: Publish
- Тема orders-events копия на каждую подписку → Очередь billing: прямая доставка
- Тема orders-events копия на каждую подписку → Очередь shipping
- Очередь billing → Сервис оплаты: ReceiveMessage
- Очередь shipping → Сервис доставки: ReceiveMessage
- Без прямой доставки очередь получает тело внутри JSON-конверта SNS, и атрибуты тоже в нём
Очередь подписывается на тему по её ARN. Каждый вызов Publish в тему становится одним сообщением
в каждой подписанной очереди, поэтому два сервиса, которые читают две очереди, оба видят каждое
сообщение. Внутри одной очереди потребители конкурируют, как показывает страница
Очереди.
При прямой доставке сообщений (raw message delivery) очередь получает тело в том виде, в каком его
опубликовали, а атрибуты сообщения становятся атрибутами сообщения SQS. Без неё очередь получает
JSON-конверт, который содержит и тело, и атрибуты. Подписка, созданная через
subscribe_queue_to_topic,
включает прямую доставку, поэтому обработчик на очереди читает те же тело и заголовки, которые
отправил издатель.
SNS отправляет сообщения в очередь, только если политика доступа очереди разрешает сервису SNS
sqs:SendMessage от имени темы. subscribe_queue_to_topic добавляет правило, ограниченное темой
через aws:SourceArn, и сохраняет правила, которые уже есть в политике. Очереди, которую
подписывает оператор, нужно такое же правило.
Этот крейт публикует в SNS, но не читает из него: тему читают через её очереди. Тема, заданная по
имени, разрешается через CreateTopic, который возвращает ARN существующей темы и создаёт
недостающую. ARN кешируется после первой публикации. Имя, которое оканчивается на .fifo, создаёт
тему FIFO, а она доставляет только в очереди FIFO. Сообщение SNS по умолчанию занимает не больше
256 КиБ.
Это поведение самого Amazon SNS
(SQS как подписчик,
прямая доставка сообщений,
CreateTopic,
квоты).