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
  • 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á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
  • JMSContext. createQueue (řetězec ve frontě)
Podporováno
Témata
  • JMSContext. createTopic (řetězec v tématu String)
Podporováno
Dočasné fronty
  • JMSContext.createTemporaryQueue()
Podporováno
Dočasná témata
  • JMSContext.createTemporaryTopic()
Podporováno
Producent zprávy/
JMSProducer
  • JMSContext.createProducer()
Podporováno
Prohlížeče front
  • JMSContext. createBrowser (fronta fronty)
  • JMSContext. createBrowser (Queue Queue; String messageSelector)
Podporováno
Příjemce zprávy/
JMSConsumer
  • JMSContext. createConsumer (cílový cíl)
  • JMSContext. createConsumer (cílový cíl, String messageSelector)
  • JMSContext. createConsumer (cílový cíl; String messageSelector; Boolean Local)

Místní není momentálně podporovaná.
Podporováno
Sdílená trvalá předplatná
  • JMSContext. createSharedDurableConsumer (téma, název řetězce)
  • JMSContext. createSharedDurableConsumer (téma, název řetězce, řetězec messageSelector)
Podporováno
Nesdílené trvalé odběry
  • JMSContext. createDurableConsumer (téma, název řetězce)
  • createDurableConsumer (téma téma; název řetězce; String messageSelector; Boolean Local)

Lokální není aktuálně podporován a měl by být nastaven na hodnotu false.
Podporováno
Sdílená netrvalá předplatná
  • JMSContext. createSharedConsumer (téma téma; String sharedSubscriptionName)
  • JMSContext. createSharedConsumer (téma téma; String sharedSubscriptionName; String messageSelector)
Podporováno
Nesdílené odběry, které nejsou trvalé
  • JMSContext. createConsumer (cílový cíl)
  • JMSContext. createConsumer (cílový cíl, String messageSelector)
  • JMSContext. createConsumer (cílový cíl; String messageSelector; Boolean Local)

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)
  • JMSProducer. setDeliveryDelay (Long deliveryDelay)
Podporováno
Zpráva vytvořena
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext. createObjectMessage (serializovatelný objekt)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext. createTextMessage (text řetězce)
Podporováno
Transakce mezi entitami
  • Connection. createSession (true, Session.SESSION_TRANSACTED)
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:

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:

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