С помощью данного учебного пособия вы научитесь использовать возможности фильтрации сообщений в Amazon Simple Notification Service (SNS). Функция фильтрации сообщений позволяет подписчикам темы SNS получать только те сообщения, которые представляют для них интерес.
В нашем примере пользователь заходит на веб-сайт и оставляет запрос на страховой полис. Например, это может быть страхование автомобиля, катера или жизни. Оставленный запрос на предложение по страхованию передается в несколько серверных систем. Среди них есть система продаж, которая занимается страхованием автомобилей и водного транспорта, другая система для страхования жизни, и система аналитики для статистической обработки всех запросов.
Как мы узнали из руководства по веерной рассылке оповещений о событиях, система веерной рассылки на основе SNS и SQS позволяет отделить веб-сайт от серверных систем. Чтобы передавать оповещения о событиях в нужную серверную систему, вы можете создать раздельные темы для каждого типа запросов и настроить логику маршрутизации сообщений в публикаторе. Но такой вариант иногда приводит к чрезмерному усложнению публикаторов, избыточному количеству тем и серьезным затратам времени на подготовку тем SNS и управление ими. Фильтрация SNS-сообщений гораздо проще!
В этом учебном пособии мы будем использовать Amazon SNS и Amazon Simple Queue Service (SQS). Оба сервиса предоставляются на уровне бесплатного пользования AWS.
Для фильтрации сообщений нужен аккаунт AWS
Создать бесплатный аккаунтУровень бесплатного пользования AWS включает 1 000 000 публикаций для Amazon Simple Notification Service и 1 000 000 запросов для Amazon Simple Queue Service.
Подробнее об уровне бесплатного пользования AWS »
Первым делом вам нужно создать тему Amazon SNS, чтобы публиковать в ней сообщения о запросах на страхование, размещенных на соответствующем веб-сайте. Это могут быть потенциальные клиенты по страхованию автомобиля, катера или жизни.
a) Щелкните здесь, и в новом окне браузера откроется Консоль управления AWS. При этом пошаговое руководство останется открытым. Когда стартовый экран загрузится, введите имя пользователя и пароль, чтобы начать работу. Затем наберите в поисковой строке notification и выберите Simple Notification Service, чтобы открыть консоль управления этим сервисом.
Каждая система продаж страховых полисов получает запросы из соответствующей очереди сообщений SQS, которая подписана на созданную тему SNS.
В первой очереди будут обрабатываться запросы на страхование автомобилей и водного транспорта, во второй — запросы на страхование жизни, а в третью мы передадим все сообщения. Третья очередь собирает все запросы на страхование любого типа, чтобы передать их в систему аналитики. Эти параметры задаются в виде политик фильтрации для подписок SNS.
На этом этапе будет создано три очереди и каждая из них будет подписана на тему SNS.
a) Щелкните здесь, чтобы открыть консоль Amazon SQS в новом окне браузера. Если появится стартовая страница консоли SQS, нажмите Get Started Now. В противном случае перейдите к следующему шагу.
Итак, вы создали три очереди Amazon SQS, и теперь их нужно подписать на тему Amazon SNS, которая распространяет новые запросы на страхование.
б) Отобразится диалоговое окно Subscribe to a Topic. В выпадающем списке Choose a Topic выберите тему Insurance-Quote-Requests, подписка на которую создается для всех трех очередей. Вы создавали тему SNS из этого же аккаунта, поэтому она сразу отображается в списке.
Если бы тема SNS была создана другим аккаунтом, вам пришлось бы использовать для подписки поле Topic ARN. Подробные сведения см. в Документации Amazon SNS или нашем блоге об интеграции нескольких аккаунтов в сервисе SNS.
Теперь у вас готовы все ресурсы SNS и SQS, осталось лишь задать политики фильтрации для настроенных политик SNS. Политика фильтрации представляет собой простой документ в формате JSON, который присваивается подписке SNS в качестве атрибута и определяет тип оповещений, которые интересуют конкретного подписчика.
Подписки без политики фильтрации будут получать все сообщения из темы SNS, а значит для очереди All-Quotes в нашем примере политику фильтрации создавать не нужно.
е) Теперь повторите этот процесс, чтобы добавить политику фильтрации для второй очереди. Выберите Life-Insurance-Quotes queue, и нажмите кнопку редактирования.
Щелкните стрелку, чтобы редактировать политику фильтрации для подписки.
В открывшемся диалоговом окне введите следующий объект JSON:{"insurance_type": ["life"]}
Щелкните Save changes.
Для очереди All-Quotes политику фильтрации настраивать не нужно. При отсутствии политики очередь будет перехватывать все сообщения, опубликованные в соответствующей теме.
Итак, давайте все проверим. На этом шаге вы смоделируете создание запросов на страхование через сайт для привлечения новых клиентов, опубликовав сообщения в соответствующей теме.
Вы опубликуете несколько сообщений с разными атрибутами, чтобы наблюдать за работой механизма фильтрации в Amazon SNS.
б) Создайте первое сообщение, введя в форму следующие значения.
В поле 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.
Также можно обратить внимание, что одна из очередей получила все сообщения, опубликованные в нашей теме. Это связано с тем, что для этой подписки не настроена политика фильтрации и действует поведение «получать все» по умолчанию.
в) Повторите эту процедуру для второй очереди. Отметьте флажком очередь Life-Insurance-Quotes. В выпадающем списке Queue Actions выберите пункт View/Delete Messages.
Щелкните Start Polling for Messages.
Убедитесь, что в эту очередь помещено всего одно сообщение, которое имеет отношение к страхованию жизни (Insurance Quote Request #2).
Щелкните Close.
На этом шаге вы удалите созданные для этого учебного пособия ресурсы, включая тему, подписки и очереди. Во избежание нежелательных затрат рекомендуется удалять ресурсы, которые больше не используются.
Теперь вы можете использовать фильтрацию сообщений в Amazon Simple Notification Service (SNS), чтобы упростить архитектуры публикации и подписки.
Фильтрация сообщений позволяет подписчикам темы Amazon SNS получать не все сообщения, опубликованные в теме, а только определенные сообщения, которые их интересуют. Так вы устраняете сложность, связанную с проектированием и реализацией логики фильтрации сообщений в подписчиках и (или) логики маршрутизации в системах публикации.
Освоив механизм фильтрации сообщений с использованием Amazon Simple Notification Service, выберите одно из следующих направлений для более подробного изучения облачной системы доставки сообщений в AWS.
Подробнее
Ознакомьтесь с обзором возможностей, компонентов и примеров использования для тем сообщений в Amazon Web Services (AWS)
Больше информации
Изучите руководство для разработчиков, где описана реализация фильтрации сообщений для тем SNS.
Решение в действии
Изучите пример, который демонстрирует реализацию фильтрации сообщений с применением AWS SDK для Python.