Windows Azure & Java. Что такое Service Bus и как её использовать из Java-приложения. Часть 1. (ru-RU)Цикл "Windows Azure & Java": Данная статья является заключительной частью цикла Windows Azure & Java и содержит в себе сведения о том, что такое Service Bus, что такое очереди и топики, а также о том, как использовать Service Bus из Java-приложения. Рис.1. Создание шины сообщений между клиентом и сервисом с помощью Service Bus Один из дополнительных компонентов платформы Windows Azure, предоставляющий функциональность безопасного, устойчивого к ошибкам и высокомасштабируемого механизма обмена сообщения, является Service Bus. Service Bus позволяет разработчику объединять в единую инфраструктуру обмена сообщениями несколько сущностей (на рис.1 приведен пример подобного объединения), использовать множество протоколов обмена сообщениями, и делать это достаточно красиво и аккуратно – приложение регистрируется в Service Bus Relay, разработчик/администратор выбирает некоторый уникальный адрес конечной точки входа (следуя конвенциям именования –https://[имяточкивхода].accesscontrol.windows.net/), после чего приложение может инициировать создание исходящего подключения к Service Bus Relay. Далее приложение будет держать этот канал открытым до тех пор, пока не будет выключено или перезагружено, постоянно посылая небольшие heartbeat-пакеты (раз в несколько секунд). Весь траффик, попадающий в Service Bus Relay, будет перенаправлен затем на конечную точку входа в облако и локальное приложение-приемник (которых, к слову, может быть до 25 одновременно на одну конечную точку входа сервиса – при этом Service Bus Relay случайным образом выбирает, какой из приемников-слушателей получит входящий запрос, обеспечивая таким образом балансировку нагрузки. При этом необходимо учитывать, что нет никаких гарантий, что нагрузка будет ровно “размазана” по всем слушателям). Service Bus оперирует двумя основными концепциями – Queues (очереди) и Topics (топики). Рассмотрим их немного подробнее. ОчередиОчереди Service Bus предоставляют модель коммуникаций, называемую brokered messaging communication – при использовании очередей части распределенного приложения осуществляют коммуникации между собой через очередь (что позволяет разрабатывать слабо-связанные системы) – отправитель сообщения кладет сообщение в очередь (очередь следует модели First In, First Out - FIFO), откуда (из начала) его забирает обработчик. Всё происходит асинхронно, поэтому никому ждать, пока кто-то закончит, не требуется. Принцип работы распределенной архитектуры с использованием очереди Service Bus изображен на рис. 2. Рис.2. Принцип работы распределенной архитектуры с использованием очереди Service Bus Подобную архитектуру можно использовать при разработке самых разных приложений (это является типичным паттерном в “облачных” приложениях), например для обеспечения коммуникаций между веб и воркер-ролями в приложении в Windows Azure, коммуникаций между локальным и облачным приложением в гибридной модели, а также для связывания нескольких частей распределенного локальногоприложения (таким образом, сценарий локального приложения расширяется в облако, но только в контексте хранения и маршрутизации сообщений). Очереди Service Bus позволяют масштабировать приложения и добиваться высокой степени отказоустойчивости за счёт собственных механизмов – если обработчики сообщения не могут какое-то время обработать сообщения, сообщения будут храниться до определенных пор либо до того момента, как обработчики не вернутся обратно в онлайн и не будут готовы к работе. ТопикиПо принципу работы топики похожи на очереди, однако их главной особенностью является множество конечных точек для обработчиков – они называются подписками (Subscriptions), и такая модель называется publish/subscribe messaging communication – каждый потребитель-обработчик “подписывается” на подписку. Каждая подписка имеет доступ ко всем добавленным сообщениям, при этом механизм фильтрации позволяет им определить, доступно ли сообщение через подписку или нет, и если доступно, то обработчик забирает сообщение из подписки аналогичным очередям образом. Таким образом, можно реализовать распространение одного и того же сообщения на несколько подписок. Механизм подписок использует принцип работы FIFO и представлен на рис.3. Рис.3. Принцип работы подписок (Subscription) Service Bus Топики и очереди позволяют разрабатывать более слабо связанные приложения, с временной независимостью (когда отправитель и обработчик сообщения не обязаны быть в он-лайн одновременно), балансировкой нагрузки. ПрактикаДля того, чтобы начать работу с Service Bus в Windows Azure, необходимо создать собственно именованный сервис (пространство имен), которое будет предоставлять контейнер для Service Bus. 1) Зайдите на портал управления Windows Azure (https://windows.azure.com ) 2) В левом нижнем углу портала управления нажмите Service Bus, Access Control & Caching, после чего нажмите на Service Bus и нажмите в левом верхнем углу портала управления кнопку New. (рис.4). Рис.4. Интерфейс портала управления Windows Azure, управление Service Bus 3) В появившемся диалоговом окне Create a new Service Namespace введите значение Namespace и нажмите Check Availability – в этот момент введенное значение будет проверено на уникальность в пределах платформы(рис.5). Рис 5.Интерфейс портала управления Windows Azure, создание контейнера Service Bus 4) Выберите соответствующие значения региона расположения вашего контейнера (лучше, если это будет тот же регион, в котором вы используете ваше приложение) и нажмите Create Namespace. Контейнер создан, дождитесь появления статуса Active(рис.6). Рис 6.Интерфейс портала управления Windows Azure, список контейнеров Service Bus Для управления вашей Service Bus вам необходимо получить определенные данные. В панели слева нажмите на Service Bus и выберите созданный только что контейнер (рис.7). Рис 7.Интерфейс портала управления Windows Azure, список контейнеров Service Bus В правой панели свойств вы увидите необходимые вам данные – в том числе Default Key. Нажмите на кнопку View рядом с Default Key для отображения ключа доступа. Если вы хотите, то можете отсюда же создать очередь и в дальнейшем использовать имя созданной очереди в своем приложении. Для этого необходимо выбрать ваш контейнер и нажать кнопку New Queue. В появившемся диалоговом окне введите необходимые данные (время жизни сообщения, время locked-состояния и так далее) и нажмите Ok. Всё, на этом настройка Service Bus закончена. Можно переходить к приложению. Практика. Настройка приложения. Как и в прошлых статьях, приведу лишь общий кусок Java-кода, который готовы к использованию, с комментариями.
Далее просто запустите ваше приложение. Для этого нажмите ALT+Shift+X либо нажмите соответствующую кнопку в меню в Eclipse (рис. 8).Рис.8. Запуск простого Java-проекта. В консоли вы должны увидеть результат. Обратите внимание, что, если вы получаете исключение ниже, вам необходимо реализовать проверку на существование очереди перед тем, как ее создавать – это исключение значит, что такая очередь уже есть в контейнере.
В этом случае вы можете также просто удалить очередь с помощью портала управления Windows Azure. |