SNS фильтрует что угодно, но не принимает пустой атрибут сообщения - PullRequest
0 голосов
/ 24 октября 2018

У меня есть фильтр для подписки SNS (SQS), где я использую эту фильтрацию:

{"source": [{"Any-But": "SOME_STRING"}]}

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

ИтакВ заключение я хотел бы найти способ, где мой фильтр принимает сообщение, если у него нет этого атрибута «source» или если оно есть, оно должно быть чем угодно, но не SOME_STRING.

Спасибовы!

1 Ответ

0 голосов
/ 06 мая 2019

Требуется отфильтровать и передать сообщения, если:

  1. Отсутствует атрибут источника
  2. Атрибут источника существует, и он должен быть любым, кроме SOME_STRING.

Политика подписки Amazon SNS принимает сообщения при следующих условиях.

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

2) Для каждого совпадающего имени атрибута существует как минимум одно совпадение между:

-> значениями имени атрибута в политике фильтра

-> атрибуты сообщения

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

Согласно вашему примеру, вы CANNOT фильтруете и пропускаете сообщения, которые не содержататрибут «источник».Но вы можете фильтровать, если атрибут источника существует, и это должно быть что угодно, но не SOME_STRING.

Обходной путь для этого .

Предполагая, что у вас есть доступ к источнику, генерирующему сообщенияУбедитесь, что каждое сообщение содержит атрибут «источник», прежде чем отправлять его в SNS.Тогда вы можете легко отфильтровать, если это что-то, но SOME_STRING.

...