Migrace stávajících aplikací Java Message Service (JMS) 2.0 z Apache ActiveMQ do Azure Service Bus
Tento článek popisuje, jak upravit existující aplikaci Java Message Service (JMS) 2.0, která komunikuje se zprostředkovatelem JMS pro interakci s Azure Service Bus azure. Konkrétně se tento článek věnuje migraci z Apache ActiveMQ nebo Amazon MQ.
Azure Service Bus podporuje úlohy platformy Java 2, edice Enterprise a Spring, které používají rozhraní API JMS 2.0 přes protokol AMQP (Advanced Message Queueing Protocol).
Než začnete
Rozdíly mezi Azure Service Bus a Apache ActiveMQ
Azure Service Bus i Apache ActiveMQ jsou zprostředkovatelé zpráv, kteří fungují jako zprostředkovatelé JMS pro klientské aplikace pro odesílání a příjem zpráv. Obě umožňují sémantiku point-to-point s frontami a sémantiku publikování a odběru s tématy a odběry.
Přesto jsou mezi nimi některé rozdíly, jak je vidět v následující tabulce:
| Kategorie | ActiveMQ | Azure Service Bus |
|---|---|---|
| Vrstvení aplikací | Clusterovaný monolith | Dvouvrstvé (brána + back-end) |
| Podpora protokolu |
|
AMQP |
| Režim zřizování |
|
Spravovaná platforma jako služba (PaaS) |
| Velikost zpráv | Konfigurovatelné zákazníky | 100 MB (Premium úroveň) |
| Vysoká dostupnost | Spravované zákazníkem | Spravované platformou |
| Zotavení po havárii | Spravované zákazníkem | Spravované platformou |
Aktuální podporované a nepodporované funkce
v následující tabulce jsou uvedené funkce JMS (Java Message Service), které Azure Service Bus aktuálně podporuje. Zobrazuje také funkce, které nejsou podporovány.
| Funkce | rozhraní API | Status |
|---|---|---|
| Fronty |
|
Podporováno |
| Témata |
|
Podporováno |
| Dočasné fronty |
|
Podporováno |
| Dočasná témata |
|
Podporováno |
| Producent zprávy/ JMSProducer |
|
Podporováno |
| Prohlížeče front |
|
Podporováno |
| Příjemce zprávy/ JMSConsumer |
Místní není momentálně podporovaná. |
Podporováno |
| Sdílená trvalá předplatná |
|
Podporováno |
| Nesdílené trvalé odběry |
Lokální není aktuálně podporován a měl by být nastaven na hodnotu false. |
Podporováno |
| Sdílená netrvalá předplatná |
|
Podporováno |
| Nesdílené odběry, které nejsou trvalé |
Lokální není aktuálně podporován a měl by být nastaven na hodnotu false. |
Podporováno |
| Selektory zpráv | závisí na vytvořeném spotřebiteli. | Podporováno |
| Zpoždění doručení (naplánované zprávy) |
|
Podporováno |
| Zpráva vytvořena |
|
Podporováno |
| Transakce mezi entitami |
|
Podporováno |
| Distribuované transakce | Nepodporováno |
Požadavky
Dvouvrstvá povaha služby Azure Service Bus různé možnosti kontinuity podnikových prostředí (vysoká dostupnost a zotavení po havárii). Při používání funkcí JMS je však třeba vzít v úvahu některé aspekty.
Upgrady služeb
V případě upgradů a restartování služby Service Bus se dočasné fronty nebo témata odstraní. Pokud je vaše aplikace citlivá na ztrátu dat v dočasných frontách nebo tématech, nepoužívejte dočasné fronty ani témata. Místo toho použijte trvalé fronty, témata a odběry.
Migrace dat
V rámci migrace a úpravy klientských aplikací pro interakci s Azure Service Bus se data v ActiveMQ nemigrují do Service Bus. Možná budete potřebovat vlastní aplikaci, která vyprázdní fronty, témata a odběry ActiveMQ a pak tyto zprávy znovu přehrává do front, témat a odběrů Service Bus.
Ověřování a autorizace
Preferovaným ověřovacím mechanismem pro přístup k azure je řízení přístupu na základě role (Azure RBAC Azure Active Directory, které je založené na Service Bus. Vzhledem k tomu, že Apache QPID JMS v současné době nepodporuje Azure RBAC nebo ověřování na základě deklarací identity, měli byste k ověřování použít klíče SAS.
Před migrací
Kontrola verzí
Při psaní aplikací JMS používáte následující komponenty a verze:
| Součást | Verze |
|---|---|
| Java Message Service (JMS) API | 1.1 nebo vyšší |
| Protokol AMQP | 1.0 |
Ujistěte se, že jsou otevřené porty AMQP.
Service Bus podporuje komunikaci přes protokol AMQP. Pro tento účel povolte komunikaci přes porty 5671 (AMQP) a 443 (TCP). V závislosti na tom, kde jsou klientské aplikace hostované, možná budete potřebovat lístek podpory, který umožní komunikaci přes tyto porty.
Důležité
Service Bus podporuje pouze protokol AMQP 1.0.
Nastavení podnikových konfigurací
Service Bus umožňuje různé podnikové funkce zabezpečení a vysoké dostupnosti. Další informace naleznete v tématu:
- Koncové body služby pro virtuální síť
- Brána firewall
- Šifrování na straně služby s klíčem spravovaným zákazníkem (BYOK)
- Privátní koncové body
- Ověřování a autorizace
Monitorování, výstrahy a trasování
Pro každý Service Bus oboru názvů publikujete metriky do Azure Monitor. Tyto metriky můžete použít k upozorňování a dynamickému škálování prostředků přidělených oboru názvů.
Další informace o různých metrikách a o tom, jak pro ně nastavit upozornění, najdete v Service Bus metrik v Azure Monitor. Můžete také zjistit další informace o trasování na straně klienta pro operace s daty a provozním/diagnostickém protokolování pro operace správy.
Metriky – New Relic
Můžete korelovat, na které metriky z ActiveMQ se mapují metriky v Azure Service Bus. Následující informace najdete na New Relic webu:
Poznámka
V současné New Relic nemá přímou bezproblémovou integraci s ActiveMQ, ale mají k dispozici metriky pro Amazon MQ. Vzhledem k tomu, že Amazon MQ je odvozený z ActiveMQ, následující tabulka mapuje metriky New Relic z Amazon MQ na Azure Service Bus.
| Seskupování metrik | Metrika Amazon MQ/ActiveMQ | Metrika Service Bus Azure |
|---|---|---|
| Broker | CpuUtilization |
CPUXNS |
| Broker | MemoryUsage |
WSXNS |
| Broker | CurrentConnectionsCount |
activeConnections |
| Broker | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
| Broker | InactiveDurableTopicSubscribersCount |
Použití metrik předplatného |
| Broker | TotalMessageCount |
Použití úrovně fronty, tématu nebo předplatného activeMessages |
| Fronta/téma | EnqueueCount |
incomingMessages |
| Fronta/téma | DequeueCount |
outgoingMessages |
| Fronta | QueueSize |
sizeBytes |
Migrace
Pokud chcete migrovat stávající aplikaci JMS 2.0 pro interakci s Service Bus, postupujte podle kroků v následujících několika částech.
Export topologie z ActiveMQ a vytvoření entit v Service Bus (volitelné)
aby se klientské aplikace mohly bez problémů připojit k Service Bus, migrujte topologii (včetně front, témat a odběrů) z Apache ActiveMQ na Service Bus.
Poznámka
V případě aplikací JMS vytvoříte fronty, témata a předplatná jako běhové operace. Většina poskytovatelů JMS (zprostředkovatelé zpráv) vám dává možnost je vytvořit za běhu. To je důvod, proč se tento krok exportu považuje za volitelný. Chcete-li zajistit, aby měla vaše aplikace oprávnění k vytvoření topologie za běhu, použijte připojovací řetězec s Manage OPRÁVNĚNÍMI SAS.
Použijte následující postup:
- K exportu topologie použijte nástroje příkazového řádku ActiveMQ .
- Znovu vytvořte stejnou topologii pomocí šablony Azure Resource Manager.
- Spusťte šablonu Azure Resource Manager.
Import závislosti maven pro implementaci Service Bus JMS
chcete-li zajistit bezproblémové připojení k Service Bus, přidejte azure-servicebus-jms balíček jako závislost do souboru Maven následujícím pom.xml způsobem:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Změny konfigurace aplikačního serveru
Tato část je přizpůsobená aplikačnímu serveru, který je hostitelem klientských aplikací připojujících se k ActiveMQ.
Jarní aplikace
Aktualizace application.properties souboru
Pokud pro připojení k ActiveMQ používáte aplikaci pružinového spuštění, chcete ze souboru odebrat vlastnosti specifické pro ActiveMQ application.properties .
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
pak přidejte do souboru vlastnosti specifické pro Service Bus application.properties .
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Nahradit ActiveMQConnectionFactory``ServiceBusJmsConnectionFactory
Dalším krokem je nahrazení instance třídy ActiveMQConnectionFactory pomocí ServiceBusJmsConnectionFactory .
Poznámka
Skutečné změny kódu jsou specifické pro aplikaci a způsob, jakým jsou spravovány závislosti, ale následující ukázka poskytuje návod na to, co by mělo být změněno.
Dříve jste mohli vytvořit instanci objektu ActiveMQConnectionFactory , následujícím způsobem:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Nyní tuto změnu měníte pro vytvoření instance objektu ServiceBusJmsConnectionFactory , následujícím způsobem:
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();
Po migraci
teď, když jste aplikaci změnili tak, aby spouštěla odesílání a příjem zpráv z Service Bus, měli byste ověřit, že funguje podle očekávání. Až to uděláte, můžete pokračovat v dalším upřesnění a modernizovat zásobníku aplikace.
Další kroky
využijte jaře Boot starter pro Azure Service Bus JMS , abyste mohli bezproblémovou integraci s Service Bus.
další informace o Service Bus zasílání zpráv a JMS najdete v tématech: