С помощью данного учебного пособия вы научитесь использовать возможности фильтрации сообщений в 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, чтобы открыть консоль управления этим сервисом.

tmt_filter-messages-sent-to-topics_1a

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

tmt_filter-messages-sent-to-topics_1a

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

1b-console-home

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

1b-console-home

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

1c-create-topic-nav-open

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

1c-dashboard

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

 

1d-No-topics

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

1d-No-topics

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

 

1e-create-topic-nav-closed

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

1e-create-topic-nav-closed

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

 

1f-topic-insurence-quote-request-created-success

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

1f-topic-insurence-quote-request-created-success

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

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

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


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

 

tmt_filter-messages-sent-to-topics_2a

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

tmt_filter-messages-sent-to-topics_2a

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

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

 

tmt_filter-messages-sent-to-topics_2b

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

tmt_filter-messages-sent-to-topics_2b

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

 

tmt_filter-messages-sent-to-topics_2c

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

tmt_filter-messages-sent-to-topics_2c

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

 

tmt_filter-messages-sent-to-topics_2d

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

tmt_filter-messages-sent-to-topics_2d

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


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

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

 

 

tmt_filter-messages-sent-to-topics_3a

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

tmt_filter-messages-sent-to-topics_3a

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

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

 

 

tmt_filter-messages-sent-to-topics_3b

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

tmt_filter-messages-sent-to-topics_3b

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

 

 

tmt_filter-messages-sent-to-topics_3c

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

tmt_filter-messages-sent-to-topics_3c

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

tmt_filter-messages-sent-to-topics_3d

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

tmt_filter-messages-sent-to-topics_3d

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

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


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

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

4a-topic-list

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

4a-topic-list

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

4b-topic-detail-insurance-quote-request

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

4b-topic-detail-insurance-quote-request

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

4c-edit-sub-insurance-quote-request

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

4c-edit-sub-insurance-quote-request

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

Щелкните Save changes.

4d-topic-edit-filter-car-boat

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

4d-topic-edit-filter-car-boat

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

 

4e-sub-saved-success

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

4e-sub-saved-success

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

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

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

Щелкните Save changes.

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

4f-topic-edit-filter-life

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

4f-topic-edit-filter-life

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

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


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

5a-topic-detail-with-3subs-2

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

5a-topic-detail-with-3subs-2

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

В поле 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.

5b-publish-message-montreal-address

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

5b-publish-message-montreal-address

в)  Вы вернетесь на страницу сведений о теме 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.

5c-publish-message-male33

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

5c-publish-message-male33

г)  Вы вернетесь на страницу сведений о теме 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.

5d-publish-message-toronto-address

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

5d-publish-message-toronto-address

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

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

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


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

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

tmt_filter-messages-sent-to-topics_6a

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

tmt_filter-messages-sent-to-topics_6a

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

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

tmt_filter-messages-sent-to-topics_6b

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

tmt_filter-messages-sent-to-topics_6b

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

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

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

Щелкните Close.

tmt_filter-messages-sent-to-topics_6c

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

tmt_filter-messages-sent-to-topics_6c

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

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

Щелкните Close.

tmt_filter-messages-sent-to-topics_6d

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

tmt_filter-messages-sent-to-topics_6d

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


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

Шаг 7а

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

Шаг 7а

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

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

7b-topic-detail-with-3subs

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

7b-topic-detail-with-3subs

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

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

 

7c-topic-detail-no-sub

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

7c-topic-detail-no-sub

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

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

tmt_filter-messages-sent-to-topics_7d

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

tmt_filter-messages-sent-to-topics_7d

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

tmt_filter-messages-sent-to-topics_7e

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

tmt_filter-messages-sent-to-topics_7e

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

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


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

Подробнее

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

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

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

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

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

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

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

Читать блог »

Да
Нет