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
  • DUPAT
  • OpenWire
AMQP
Režim zřizování
  • Infrastruktura jako služba (IaaS), místní
  • Amazon MQ (spravovaná platforma jako služba)
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
  • JMSContext.createQueue( String queueName)
Podporuje se
Témata
  • JMSContext.createTopic( String topicName)
Podporuje se
Dočasné fronty
  • JMSContext.createTemporaryQueue()
Podporuje se
Dočasná témata
  • JMSContext.createTemporaryTopic()
Podporuje se
Producent zpráv /
JMSProducer
  • JMSContext.createProducer()
Podporuje se
Prohlížeče front
  • JMSContext.createBrowser(fronta fronty)
  • JMSContext.createBrowser(fronta fronty, string messageSelector)
Podporuje se
Příjemce zprávy/
JMSConsumer
  • JMSContext.createConsumer( cíl cíle)
  • JMSContext.createConsumer( cíl, string messageSelector)
  • JMSContext.createConsumer( Cíl, String messageSelector, boolean noLocal)

NoLocal se v současné době nepodporuje.
Podporuje se
Sdílená odolná předplatná
  • JMSContext.createSharedDurableConsumer(téma téma, název řetězce)
  • JMSContext.createSharedDurableConsumer(téma, název řetězce, řetězec messageSelector)
Podporuje se
Zrušení sdílení trvalých předplatných
  • JMSContext.createDurableConsumer(téma tématu, název řetězce)
  • createDurableConsumer(téma, název řetězce, řetězec messageSelector, logická hodnota noLocal)

noLocal se v současné době nepodporuje a měl by být nastavený na false.
Podporuje se
Sdílená non-durable předplatná
  • JMSContext.createSharedConsumer(téma téma, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(téma, String sharedSubscriptionName, String messageSelector)
Podporuje se
Nesdílené non-durable předplatná
  • JMSContext.createConsumer(Cílová cíl)
  • JMSContext.createConsumer( cíl, string messageSelector)
  • JMSContext.createConsumer( Cíl, String messageSelector, boolean noLocal)

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)
  • JMSProducer.setDeliveryDelay( long deliveryDelay)
Podporuje se
Zpráva byla vytvořena.
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Serializable – objekt)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Text řetězce)
Podporuje se
Transakce mezi entitami
  • Připojení ion.createSession(true, Session.SESSION_TRANSACTED)
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:

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:

  1. K exportu topologie použijte nástroje příkazového řádku ActiveMQ.
  2. Znovu vytvořte stejnou topologii pomocí šablony Azure Resource Manageru.
  3. 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 ServiceBusJmsConnectionFactoryná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: