Migrace stávajících aplikací JMS (Java Message Service) 2.0 z Apache ActiveMQ do Služby Azure Service Bus
Tento článek popisuje, jak upravit existující aplikaci JMS (Java Message Service) 2.0, která místo toho komunikuje se zprostředkovatelem JMS pro interakci se službou Azure Service Bus. Konkrétně se v tomto článku věnuje migraci z Apache ActiveMQ nebo Amazon MQ.
Azure Service Bus podporuje platformu Java 2, edice Enterprise a springové úlohy, které používají rozhraní API JMS 2.0 přes protokol AMQP (Advanced Message Queueing Protocol).
Než začnete
Rozdíly mezi Službou Azure Service Bus a Apache ActiveMQ
Azure Service Bus i Apache ActiveMQ jsou zprostředkovateli zpráv, kteří fungují jako poskytovatelé JMS pro klientské aplikace, aby odesílaly zprávy a přijímaly zprávy. Oba umožňují sémantiku typu point-to-point s frontami a sémantiku publikování a odběru s tématy a předplatnými.
I tak jsou mezi těmito dvěma rozdíly některé rozdíly, jak ukazuje následující tabulka:
Kategorie | ActiveMQ | Azure Service Bus |
---|---|---|
Vrstvení aplikací | Skupinový monolitický | Dvouvrstvé (brána + back-end) |
Podpora protokolu |
|
AMQP |
Režim zřizování |
|
Spravovaná platforma jako služba (PaaS) |
Velikost zprávy | Konfigurovatelné zákazníky | 100 MB (úroveň Premium) |
Vysoká dostupnost | Spravovaná zákazníkem | Spravovaná platforma |
Zotavení po havárii | Spravovaná zákazníkem | Spravovaná platforma |
Aktuální podporované a nepodporované funkce
Následující tabulka uvádí funkce JMS (Java Message Service), které služba Azure Service Bus aktuálně podporuje. Zobrazuje také nepodporované funkce.
Funkce | API | Průběh |
---|---|---|
Fronty |
|
Podporuje se |
Témata |
|
Podporuje se |
Dočasné fronty |
|
Podporuje se |
Dočasná témata |
|
Podporuje se |
Producent zpráv / JMSProducer |
|
Podporuje se |
Prohlížeče front |
|
Podporuje se |
Příjemce zprávy/ JMSConsumer |
NoLocal se v současné době nepodporuje. |
Podporuje se |
Sdílená odolná předplatná |
|
Podporuje se |
Zrušení sdílení trvalých předplatných |
noLocal se v současné době nepodporuje a měl by být nastavený na false. |
Podporuje se |
Sdílená non-durable předplatná |
|
Podporuje se |
Nesdílené non-durable předplatná |
noLocal se v současné době nepodporuje a měl by být nastavený na false. |
Podporuje se |
Selektory zpráv | závisí na vytvořeném příjemci. | Podporuje se |
Zpoždění doručení (naplánované zprávy) |
|
Podporuje se |
Zpráva byla vytvořena. |
|
Podporuje se |
Transakce mezi entitami |
|
Podporuje se |
Distribuované transakce | Nepodporováno |
Důležité informace
Dvouvrstvá povaha služby Azure Service Bus nabízí různé možnosti kontinuity podnikových procesů (vysoká dostupnost a zotavení po havárii). Při používání funkcí JMS je ale potřeba vzít v úvahu některé aspekty.
Upgrady služeb
V případě upgradů a restartování služby Service Bus se odstraní dočasné fronty nebo témata. 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žívejte trvalé fronty, témata a odběry.
Migrace dat
V rámci migrace a úpravy klientských aplikací pro interakci se službou Azure Service Bus se data uložená v ActiveMQ nemigrují do služby Service Bus. Možná budete potřebovat vlastní aplikaci, která vyprázdní fronty ActiveMQ, témata a odběry a pak přehraje zprávy do front, témat a odběrů služby Service Bus.
Ověřování a autorizace
Upřednostňovaným mechanismem ověřování pro Service Bus je řízení přístupu na základě role Azure (Azure RBAC) založené na Microsoft Entra ID. Pokud chcete povolit řízení přístupu na základě role, postupujte podle kroků v příručce pro vývojáře JMS 2.0 služby Azure Service Bus.
Před migrací
Kontrola verze
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 zde:
- Koncové body služby pro virtuální síť
- Brána firewall
- Šifrování na straně služby s využitím klíče spravovaného zákazníkem (BYOK)
- Privátní koncové body
- Ověřování a autorizace
Monitorování, upozornění a trasování
Pro každý obor názvů služby Service Bus publikujete metriky do služby Azure Monitor. Tyto metriky můžete použít k upozorňování a dynamickému škálování prostředků přidělených k oboru názvů.
Další informace o různých metrikách a o tom, jak na ně nastavit upozornění, najdete v tématu Metriky služby Service Bus ve službě Azure Monitor. Můžete také zjistit další informace o trasování na straně klienta pro operace s daty a provozní/diagnostické protokolování pro operace správy.
Metriky – New Relic
Můžete korelovat metriky z mapy ActiveMQ na které metriky ve službě Azure Service Bus. Podívejte se na následující web New Relic:
Poznámka:
New Relic v současné době nemá přímou a 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 služby Azure Service Bus |
---|---|---|
Zprostředkovatel | CpuUtilization |
CPUXNS |
Zprostředkovatel | MemoryUsage |
WSXNS |
Zprostředkovatel | CurrentConnectionsCount |
activeConnections |
Zprostředkovatel | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Zprostředkovatel | InactiveDurableTopicSubscribersCount |
Použití metrik předplatného |
Zprostředkovatel | TotalMessageCount |
Použití fronty, tématu, úrovně 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 se službou Service Bus, postupujte podle kroků v následujících několika částech.
Export topologie z ActiveMQ a vytvoření entit ve službě Service Bus (volitelné)
Aby se klientské aplikace mohly bezproblémově připojovat pomocí služby Service Bus, migrujte topologii (včetně front, témat a odběrů) z Apache ActiveMQ do služby Service Bus.
Poznámka:
Pro aplikace JMS vytvoříte fronty, témata a odběry jako operaci modulu runtime. Většina poskytovatelů JMS (zprostředkovatelé zpráv) vám dává možnost je vytvořit za běhu. Proto je tento krok exportu považován za volitelný. Pokud chcete zajistit, aby vaše aplikace má oprávnění k vytvoření topologie za běhu, použijte připojovací řetězec s oprávněními SASManage
.
Postup:
- K exportu topologie použijte nástroje příkazového řádku ActiveMQ.
- Znovu vytvořte stejnou topologii pomocí šablony Azure Resource Manageru.
- Spusťte šablonu Azure Resource Manageru.
Import závislosti maven pro implementaci JMS služby Service Bus
Pokud chcete zajistit bezproblémové připojení ke službě Service Bus, přidejte azure-servicebus-jms
balíček jako závislost do souboru Maven pom.xml
následujícím 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í, které se připojují k ActiveMQ.
Aplikace Spring
application.properties
Aktualizace souboru
Pokud k připojení k ActiveMQ používáte aplikaci Spring Boot, chcete ze application.properties
souboru odebrat vlastnosti specifické pro ActiveMQ.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Potom do application.properties
souboru přidejte vlastnosti specifické pro Service Bus.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Nahradit ActiveMQConnectionFactory
čím ServiceBusJmsConnectionFactory
Dalším krokem je nahrazení instance ActiveMQConnectionFactory
parametrem ServiceBusJmsConnectionFactory
.
Poznámka:
Skutečné změny kódu jsou specifické pro aplikaci a způsob, jakým se závislosti spravují, ale následující ukázka obsahuje pokyny k tomu, co by se mělo změnit.
Dříve jste pravděpodobně vytvořili instanci objektu ActiveMQConnectionFactory
, a to 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();
Teď změníte tuto instanci 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 upravili tak, aby začala odesílat a přijímat zprávy ze služby Service Bus, měli byste ověřit, že funguje podle očekávání. Až to bude hotové, můžete pokračovat k dalšímu zpřesnění a modernizaci zásobníku aplikací.
Další kroky
Pomocí úvodní sady Spring Boot pro Azure Service Bus JMS můžete bezproblémovou integraci se službou Service Bus.
Další informace o zasílání zpráv služby Service Bus a JMS najdete tady: