Перенос существующих приложений Java Message Service (JMS) 2.0 с Apache ActiveMQ на служебную шину Azure.
В этой статье обсуждается, как модифицировать существующее приложение Java Message Service (JMS) 2.0, которое взаимодействует с брокером JMS для взаимодействия со служебной шиной Azure. В частности, в статье рассматривается перенос с Apache ActiveMQ или Amazon MQ.
Шина Azure Service Bus поддерживает Java 2 Platform, Enterprise Edition и Spring, которые используют JMS 2.0 API поверх Advanced Message Queueing Protocol (AMQP).
Перед началом работы
Различия между служебной шиной Azure и Apache ActiveMQ
Служебная шина Azure и Apache ActiveMQ — это брокеры сообщений, которые действуют как поставщики JMS для клиентских приложений при отправке и получения сообщений. Они включают семантику "точка-точка" с очередями и семантику публикации и подписки с разделами и подписками.
Несмотря на это, между ними существуют некоторые различия, как показано в следующей таблице.
Категория | ActiveMQ | Служебная шина Azure |
---|---|---|
Распределение по уровням приложений | Кластеризованный монолит | Двухуровневый (шлюз + серверная часть) |
Поддержка протоколов |
|
AMQP |
Режим подготовки |
|
Управляемая платформа как услуга (PaaS) |
Размер сообщения | Настраиваемый пользователем | 100 МБ (уровень "Премиум") |
Высокая доступность | Управляемые клиентом | Управляемые платформой |
Аварийное восстановление | Управляемые клиентом | Управляемые платформой |
Поддерживаемые и неподдерживаемые функции в настоящее время
В следующей таблице перечислены функции службы сообщений Java (JMS), поддерживаемые в настоящее время служебной шиной Azure. В ней также указаны неподдерживаемые функции.
Компонент | API | Состояние |
---|---|---|
Очереди |
|
Поддерживается |
Темы |
|
Поддерживается |
Временные очереди |
|
Поддерживается |
Временные разделы |
|
Поддерживается |
Создатель сообщений / JMSProducer |
|
Поддерживается |
Браузеры очередей |
|
Поддерживается |
Потребитель сообщения/ JMSConsumer |
noLocal в настоящее время не поддерживается |
Поддерживается |
общие устойчивые подписки; |
|
Поддерживается |
Устойчивые подписки без общего доступа |
noLocal в настоящее время не поддерживается, для этой величины следует задать значение "false" |
Поддерживается |
общие неустойчивые подписки; |
|
Поддерживается |
Необщие неустойчивые подписки |
noLocal в настоящее время не поддерживается, для этой величины следует задать значение "false" |
Поддерживается |
Селекторы сообщений | зависит от созданного получателя | Поддерживается |
Delivery Delay (запланированные сообщения) |
|
Поддерживается |
Создание сообщения |
|
Поддерживается |
Транзакции между объектами |
|
Поддерживается |
Распределенные транзакции | Не поддерживается |
Рекомендации
Двухуровневая служебная шина Azure предоставляет различные возможности обеспечения непрерывности бизнес-процессов (высокий уровень доступности и аварийное восстановление). Однако при использовании функций JMS необходимо учитывать некоторые соображения.
Обновления службы
В случае обновления и перезапуска служебной шины временные очереди или разделы удаляются. Если ваше приложение чувствительно к утере данных во временных очередях или разделах, не используйте временные очереди или разделы. Вместо этого используйте устойчивые очереди, разделы и подписки.
Перенос данных
В рамках переноса и изменения клиентских приложений для взаимодействия со служебной шиной Azure данные, хранящиеся в ActiveMQ, не переносятся в служебную шину. Может потребоваться пользовательское приложение для очистки очередей, разделов и подписок ActiveMQ, а также воспроизведения сообщений в очередях, разделах и подписках служебной шины Microsoft Azure.
Аутентификация и авторизация
Управление доступом на основе ролей Azure (Azure RBAC), поддерживаемая идентификатором Microsoft Entra ID, является предпочтительным механизмом проверки подлинности для служебная шина. Чтобы включить управление доступом на основе ролей, выполните действия, описанные в руководстве разработчика Служебная шина Azure JMS 2.0.
Подготовка к миграции
Проверка версии
При написании приложений JMS используются следующие компоненты и версии:
Компонент | Версия |
---|---|
Java Message Service (JMS) API | версия 1.1 или выше. |
Протокол AMQP | 1.0 |
Убедитесь, что порты AMQP открыты.
Служебная шина поддерживает обмен данными по протоколу AMQP. Для этой цели необходимо разрешить обмен данными через порты 5671 (AMQP) и 443 (TCP). В зависимости от того, где размещаются клиентские приложения, может потребоваться обращение в службу поддержки, чтобы разрешить обмен данными через эти порты.
Важно!
Служебная шина поддерживает только протокол AMQP 1.0.
Настройка корпоративных конфигураций
Служебная шина обеспечивает различные функции корпоративной безопасности и высокого уровня доступности. Дополнительные сведения см. в разделе:
- Конечные точки службы для виртуальной сети
- Брандмауэр.
- Шифрование на стороне сервера с использованием управляемых клиентом ключей (BYOK)
- Частные конечные точки
- Проверка подлинности и авторизация
Мониторинг, оповещения и трассировка
Для каждого пространства имен служебной шины публикуются метрики на Azure Monitor. Эти метрики можно использовать для оповещения и динамического масштабирования ресурсов, выделенных пространству имен.
Дополнительные сведения о различных метриках и о настройке оповещений см. в разделе Метрики служебной шины в Azure Monitor. Кроме того, вы можете получить дополнительные сведения о трассировке на стороне клиента для операций с данными, а также оперативном и диагностическом ведении журнала для операций управления.
Метрики — New Relic
Вы можете сопоставить метрики из ActiveMQ Map с метриками в служебной шине Azure. См. следующие сведения с веб-сайта New Relic:
Примечание.
Сейчас у New Relic нет прямой, простой интеграции с ActiveMQ, но есть метрики, доступные для Amazon MQ. Поскольку Amazon MQ является производным от ActiveMQ, в следующей таблице сопоставлены метрики New Relic из Amazon MQ в служебную шину Azure.
Группирование метрик | Метрика Amazon MQ/ActiveMQ | Метрика служебной шины Azure |
---|---|---|
Broker | CpuUtilization |
CPUXNS |
Broker | MemoryUsage |
WSXNS |
Broker | CurrentConnectionsCount |
activeConnections |
Broker | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Broker | InactiveDurableTopicSubscribersCount |
Использование метрик подписки |
Broker | TotalMessageCount |
Используйте уровень очереди/темы/подписки activeMessages |
Очередь/Раздел | EnqueueCount |
incomingMessages |
Очередь/Раздел | DequeueCount |
outgoingMessages |
Очередь | QueueSize |
sizeBytes |
Миграция
Чтобы перенести существующее приложение JMS 2.0 для взаимодействия со служебной шиной Microsoft Azure, выполните действия, описанные в следующих разделах.
Экспорт топологии из ActiveMQ и создание сущностей в служебной шине Microsoft Azure (необязательно)
Чтобы обеспечить возможность беспрепятственного подключения клиентских приложений к служебной шине Microsoft Azure, перенесите топологию (включая очереди, разделы и подписки) из Apache ActiveMQ в служебную шину.
Примечание.
Для приложений JMS в качестве операции времени выполнения создаются очереди, разделы и подписки. Большинство поставщиков JMS (брокеров сообщений) дают возможность создавать их во время выполнения. Вот почему этот шаг экспорта считается необязательным. Чтобы убедиться, что приложение имеет разрешения на создание топологии во время выполнения, используйте строку подключения с разрешениями SAS Manage
.
Для этого необходимо сделать следующее.
- Чтобы экспортировать топологию, используйте программы командной строки ActiveMQ.
- Повторно создайте ту же топологию с помощью шаблона Azure Resource Manager.
- Выполните шаблон Azure Resource Manager.
Импорт зависимости maven для реализации JMS служебной шины Microsoft Azure
Чтобы обеспечить бесперебойное подключение к служебной шине Microsoft Azure, добавьте пакет azure-servicebus-jms
в качестве зависимости в файл pom.xml
Maven следующим образом:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Изменения конфигурация сервера приложений
Эта часть настроена для сервера приложений, на котором размещены клиентские приложения, подключающиеся к ActiveMQ.
Приложения Spring
Обновите файл application.properties
.
Если вы используете приложение Spring Boot для подключения к ActiveMQ, необходимо удалить свойства, относящиеся к ActiveMQ, из файла application.properties
.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Затем добавьте в файл application.properties
свойства, относящиеся к служебной шине Microsoft Azure.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Замените ActiveMQConnectionFactory
на ServiceBusJmsConnectionFactory
.
Следующим шагом является замена экземпляра ActiveMQConnectionFactory
на ServiceBusJmsConnectionFactory
.
Примечание.
Фактические изменения кода специфичны для приложения и того, как управлять зависимостями, но следующий пример подсказывает, что должно быть изменено.
Ранее можно было создать экземпляр объекта ActiveMQConnectionFactory
, как показано ниже.
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Теперь изменим его для создания экземпляра объекта ServiceBusJmsConnectionFactory
, как показано ниже.
ServiceBusJmsConnectionFactorySettings settings = new ServiceBusJmsConnectionFactorySettings();
String SERVICE_BUS_CONNECTION_STRING = "<Service Bus Connection string>";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(SERVICE_BUS_CONNECTION_STRING, settings);
Connection connection = factory.createConnection();
connection.start();
После миграции
Теперь, когда вы изменили приложение, чтобы начать отправку и получение сообщений из служебной шины Microsoft Azure, следует убедиться, что она работает правильно. Когда это будет сделано, можно приступить к дальнейшей доработке и модернизации стека приложений.
Следующие шаги
Используйте Spring Boot Starter для Azure Service Bus JMS, чтобы обеспечить безукоризненную интеграцию со служебной шиной.
Дополнительные сведения об обмене сообщениями через служебную шину Microsoft Azure и JMS см. в следующих статьях: