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

Маршрутизация сообщений от Амазонки SNS до SQS с фильтрацией

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

           message_x
         /    |     \
foo-msg_q  bar-msg_q  msg-logger_q

Клиенты публикуют сообщения на обмен message_x, который направляет сообщения только с ключом маршрутизации "foo" в очередь foo-msg_q, только с ключом маршрутизации "bar" в очередь bar-msg_q и все сообщения в очередь msg-logger_q.

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

  • AWS: CurrentTime
  • AWS: EpochTime
  • AWS: MultiFactorAuthAge
  • AWS: principaltype
  • AWS: SecureTransport
  • AWS: SourceArn
  • AWS: SourceIP
  • AWS: UserAgent
  • AWS: идентификатор пользователя
  • AWS: имя пользователя

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

Можно ли сделать что-то подобное при использовании Amazon Simple Notification Service, чтобы развернуть несколько очередей очереди очереди, причем каждая очередь получает подмножество сообщений, опубликованных в теме?

4b9b3361

Ответ 1

РЕДАКТИРОВАТЬ

Я не могу удалить принятый ответ, поэтому смотрите ответ ниже для правильного ответа, так как эта функция была выпущена.

Оригинальный (сейчас неправильный) ответ (для потомков):

Нет, это невозможно. Было бы отличной возможностью для них, чтобы добавить, хотя.

Единственная известная мне альтернатива - создать тему для каждого правила маршрутизации, а затем опубликовать ее в нужной теме. Это не красиво, но это решает задачу. Если у вас много правил, вам может понадобиться более 3000 тем, которые они разрешают. Вы можете запросить увеличение лимита тем у AWS на их веб-сайте, следуя инструкциям, приведенным здесь http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_ses_quota.

Ответ 2

Это возможно с помощью фильтрации атрибутов сообщений в SNS. После подписки различных очередей SQS на тему SNS вы можете указать атрибуты для фильтрации с помощью API-интерфейса SetSubscriptionAttributes SNS API. Это позволит сообщениям с разными атрибутами направляться в правильную очередь SQS.

Это также не ограничивается очередями SQS, а любыми источниками подписки по теме SNS. Например, одна тема SNS может публиковать один набор сообщений в Lambda, а другой - SQS.

Ссылка на SDK: http://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html

Более подробная информация приведена здесь с примерами: https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/