С помощью данного учебного пособия вы научитесь использовать возможности фильтрации сообщений в Amazon Simple Notification Service (SNS). Функция фильтрации сообщений позволяет подписчикам темы SNS получать только те сообщения, которые представляют для них интерес.

В нашем примере пользователь заходит на веб-сайт и оставляет запрос на страховой полис. Например, это может быть страхование автомобиля, катера или жизни. Оставленный запрос на предложение по страхованию передается в несколько серверных систем. Среди них есть система продаж, которая занимается страхованием автомобилей и водного транспорта, другая система для страхования жизни, и система аналитики для статистической обработки всех запросов.

Как мы узнали из руководства по веерной рассылке оповещений о событиях, система веерной рассылки на основе SNS и SQS позволяет отделить веб-сайт от серверных систем. Чтобы передавать оповещения о событиях в нужную серверную систему, вы можете создать раздельные темы для каждого типа запросов и настроить логику маршрутизации сообщений в публикаторе. Но такой вариант иногда приводит к чрезмерному усложнению публикаторов, избыточному количеству тем и серьезным затратам времени на подготовку тем SNS и управление ими. Фильтрация SNS-сообщений гораздо проще!

В этом учебном пособии мы будем использовать Amazon SNS и Amazon Simple Queue Service (SQS). Оба сервиса предоставляются на уровне бесплатного пользования AWS.

 

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


a) Щелкните здесь, и в новом окне браузера откроется Консоль управления AWS. При этом пошаговое руководство останется открытым. Когда стартовый экран загрузится, введите имя пользователя и пароль, чтобы начать работу. Затем наберите в поисковой строке notification и выберите Simple Notification Service, чтобы открыть консоль управления этим сервисом.

(Нажмите, чтобы увеличить.)


б)  Если откроется стартовая страница консоли SNS, нажмите Start with an overview. Если вы не видите эту страницу, сразу переходите к следующему шагу.

(Нажмите, чтобы увеличить.)


в)  Щелкните Topics в меню с левой стороны.

1c-create-topic-nav-open

(Нажмите, чтобы увеличить.)


г)  Щелкните Create topic.

 

(Нажмите, чтобы увеличить.)


д)  В поле «Topic name» введите Insurance-Quote-Requests, затем прокрутите вниз и щелкните Create topic.

 

(Нажмите, чтобы увеличить.)


е)  На странице сведений о теме появится новая тема.

 

(Нажмите, чтобы увеличить.)

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

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

На этом этапе будет создано три очереди и каждая из них будет подписана на тему SNS.


a) Щелкните здесь, чтобы открыть консоль Amazon SQS в новом окне браузера. Если появится стартовая страница консоли SQS, нажмите Get Started Now. В противном случае перейдите к следующему шагу.

 

(Нажмите, чтобы увеличить.)


б)  На странице Create New Queue введите Vehicle-Insurance-Quotes в поле Queue Name.

Сохраните выбранным вариант Standard Queue и щелкните Quick-Create Queue.

 

(Нажмите, чтобы увеличить.)


в)  Щелкните Create New Queue и повторите шаг 2(б), чтобы создать две дополнительных очереди:
Life-Insurance-Quotes
 и All-Quotes.

 

(Нажмите, чтобы увеличить.)


г)  Теперь все три очереди отображаются в списке на консоли SQS.

 

(Нажмите, чтобы увеличить.)

Итак, вы создали три очереди Amazon SQS, и теперь их нужно подписать на тему Amazon SNS, которая распространяет новые запросы на страхование.


a)  В списке очередей выберите очереди Vehicle-Insurance-Quotes, Life-Insurance-Quotes и All-Quotes.

Щелкните Queue Actions и выберите Subscribe Queues to SNS Topic.

 

 

(Нажмите, чтобы увеличить.)


б)  Отобразится диалоговое окно Subscribe to a Topic. В выпадающем списке Choose a Topic выберите тему Insurance-Quote-Requests, подписка на которую создается для всех трех очередей. Вы создавали тему SNS из этого же аккаунта, поэтому она сразу отображается в списке.

Если бы тема SNS была создана другим аккаунтом, вам пришлось бы использовать для подписки поле Topic ARN. Подробные сведения см. в Документации Amazon SNS или нашем блоге об интеграции нескольких аккаунтов в сервисе SNS.

 

 

(Нажмите, чтобы увеличить.)


в)  Не меняя параметра Topic Region, щелкните Subscribe.  

 

 

(Нажмите, чтобы увеличить.)


г)  Появится диалоговое окно Topic Subscription Result. Нажмите OK.

(Нажмите, чтобы увеличить.)

Теперь у вас готовы все ресурсы SNS и SQS, осталось лишь задать политики фильтрации для настроенных политик SNS. Политика фильтрации представляет собой простой документ в формате JSON, который присваивается подписке SNS в качестве атрибута и определяет тип оповещений, которые интересуют конкретного подписчика.

Подписки без политики фильтрации будут получать все сообщения из темы SNS, а значит для очереди All-Quotes в нашем примере политику фильтрации создавать не нужно.


a)  Вернитесь в окно браузера, где открыта консоль Amazon SNS, и щелкните Topics для получения всех настроенных тем в текущем регионе.

Щелкните на названии темы Insurance-Quote-Requests в списке.  

(Нажмите, чтобы увеличить.)


б)  Это действие открывает страницу сведений о теме Insurance-Quote-Requests, где отображаются все очереди SQS, подписанные на эту тему SNS. Выберите очередь Vehicle-Insurance-Quotes и щелкните Edit.

(Нажмите, чтобы увеличить.)


в)  Вы будете направлены на страницу Edit subscription. Щелкните стрелку, чтобы редактировать политику фильтрации для подписки. 

(Нажмите, чтобы увеличить.)


г)  В открывшемся диалоговом окне введите следующий объект JSON:{"insurance_type": ["car", "boat"]}

Щелкните Save changes.

(Нажмите, чтобы увеличить.)


д)  Откроется диалоговое окно с подтверждением успешного создания политики фильтрации для подписки.

 

(Нажмите, чтобы увеличить.)


е)  Теперь повторите этот процесс, чтобы добавить политику фильтрации для второй очереди. Выберите Life-Insurance-Quotes queue, и нажмите кнопку редактирования.

Щелкните стрелку, чтобы редактировать политику фильтрации для подписки.

В открывшемся диалоговом окне введите следующий объект JSON:{"insurance_type": ["life"]}

Щелкните Save changes.

Для очереди All-Quotes политику фильтрации настраивать не нужно. При отсутствии политики очередь будет перехватывать все сообщения, опубликованные в соответствующей теме.

(Нажмите, чтобы увеличить.)

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

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


a)  На странице сведений о темеInsurance-Quote-Requests щелкните Publish message.

(Нажмите, чтобы увеличить.)


б)  Создайте первое сообщение, введя в форму следующие значения.

В поле Subject введите Insurance Quote Request #1.

Для параметра Message structure оставьте выбранным значение Identical payload for all delivery protocols.

В поле «Message body to send to the endpoint» введите следующий текст, который соответствует запросу на страхование автомобиля.
2017 Volvo S60, Montreal

В разделе Message attributes выполните следующее.

  • Выберите String в поле Type.
  • Введите insurance_type в поле Name.
  • Введите car в поле Value.

Щелкните Publish message.

(Нажмите, чтобы увеличить.)


в)  Вы вернетесь на страницу сведений о теме Insurance-Quote-Requests. Еще раз щелкните Publish message и создайте второе сообщение со следующими параметрами.

В поле Subject, введите Insurance Quote Request #2.

Для параметра Message structure оставьте выбранным значение Identical payload for all delivery protocols.

В поле Message body to send to the endpoint введите следующий текст, который соответствует запросу на страхование автомобиля.
Male, 33 years old, Vancouver.

В разделе Message attributes выполните следующее.

  • Выберите String в поле Type.
  • Введите insurance_type в поле Name.
  • Введите life в поле Value.

Щелкните Publish message.

(Нажмите, чтобы увеличить.)


г)  Вы вернетесь на страницу сведений о теме Insurance-Quote-Requests. Еще раз щелкните Publish message и создайте второе сообщение со следующими параметрами.

В поле Subject, введите Insurance Quote Request #3

Для параметра Message structure оставьте выбранным значение Identical payload for all delivery protocols.

В поле «Message body to send to the endpoint» введите следующий текст, который соответствует запросу на страхование автомобиля.
Townhouse, 1500 sq ft, Toronto

В разделе Message attributes выполните следующее.

  • Выберите String в поле Type.
  • Введите insurance_type в поле Name.
  • Введите home в поле Value.

Щелкните Publish message.

(Нажмите, чтобы увеличить.)

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

Вы увидите, что подписанные на тему очереди Amazon SQS получили только те сообщения, в которых атрибуты соответствовали правилам политики для соответствующей подписки SNS.

Также можно обратить внимание, что одна из очередей получила все сообщения, опубликованные в нашей теме. Это связано с тем, что для этой подписки не настроена политика фильтрации и действует поведение «получать все» по умолчанию.


a)  Вернитесь в консоль Amazon SQS. Выберите очередь Vehicle-Insurance-Quotes и щелкните Queue Actions.

Выберите View/Delete Messages.  

(Нажмите, чтобы увеличить.)


б)  Щелкните Start Polling for Messages.

Убедитесь, что в эту очередь помещено всего одно сообщение, которое имеет отношение к страхованию автомобиля (Insurance Quote Request #1). Закройте диалоговое окно.

(Нажмите, чтобы увеличить.)


в)  Повторите эту процедуру для второй очереди. Отметьте флажком очередь Life-Insurance-Quotes. В выпадающем списке Queue Actions выберите пункт View/Delete Messages.

Щелкните Start Polling for Messages.

Убедитесь, что в эту очередь помещено всего одно сообщение, которое имеет отношение к страхованию жизни (Insurance Quote Request #2).

Щелкните Close.

(Нажмите, чтобы увеличить.)


г)  И наконец отметьте флажком очередь All-Quotes. Щелкните Queue Actions, выберите View/Delete Messages и щелкните Start Polling for Messages.

Убедитесь, что в эту очередь помещены все три сообщения (Insurance Quote Requests #1, #2 и #3).

Щелкните Close.

(Нажмите, чтобы увеличить.)

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


a)  В консоли Amazon SNS щелкните Topics, а затем щелкните ссылку на тему Insurance-Quote-Requests.

Шаг 7а

(Нажмите, чтобы увеличить.)

Шаг 7а

б)  На странице сведений о теме Insurance-Quote-Requests выберите все подписки и нажмите Delete.

Нажмите Delete в диалоговом окне для подтверждения удаления. 

(Нажмите, чтобы увеличить.)


в)  На странице сведений о теме Insurance-Quote-Requests щелкните Delete.

Подтвердите удаление, набрав delete me в диалоговом окне, и нажмите Delete

 

(Нажмите, чтобы увеличить.)


г)  Вернитесь в консоль Amazon SQS. Выберите все три очереди, использованные для этого учебного пособия, и щелкните Queue Actions, а затем Delete Queues.

Подтвердите удаление в диалоговом окне.

(Нажмите, чтобы увеличить.)


д)  Теперь можно выйти из Консоли управления AWS.  

(Нажмите, чтобы увеличить.)

Теперь вы можете использовать фильтрацию сообщений в Amazon Simple Notification Service (SNS), чтобы упростить архитектуры публикации и подписки.

Фильтрация сообщений позволяет подписчикам темы Amazon SNS получать не все сообщения, опубликованные в теме, а только определенные сообщения, которые их интересуют. Так вы устраняете сложность, связанную с проектированием и реализацией логики фильтрации сообщений в подписчиках и (или) логики маршрутизации в системах публикации.


Освоив механизм фильтрации сообщений с использованием Amazon Simple Notification Service, выберите одно из следующих направлений для более подробного изучения облачной системы доставки сообщений в AWS.

Подробнее

Ознакомьтесь с обзором возможностей, компонентов и примеров использования для тем сообщений в Amazon Web Services (AWS)

Посетите веб-страницу Amazon SNS »

Больше информации

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

Ознакомиться с документацией »

Решение в действии

Изучите пример, который демонстрирует реализацию фильтрации сообщений с применением AWS SDK для Python.

Читать блог »