Migrera befintliga JMS 2.0-program (Java Message Service) från Apache ActiveMQ till Azure Service Bus
Den här artikeln beskriver hur du ändrar en befintlig JMS 2.0-app (Java Message Service) som interagerar med en JMS-koordinator för att interagera med Azure Service Bus i stället. I synnerhet omfattar artikeln migrering från Apache ActiveMQ eller Amazon MQ.
Azure Service Bus har stöd för Java 2 Platform-, Enterprise Edition- och Spring-arbetsbelastningar som använder JMS 2.0 API över ADVANCED Message Queueing Protocol (AMQP).
Innan du börjar
Skillnader mellan Azure Service Bus och Apache ActiveMQ
Både Azure Service Bus och Apache ActiveMQ fungerar som JMS-leverantörer för klientprogram för att skicka meddelanden till och ta emot meddelanden från. De aktiverar både punkt-till-punkt-semantiken med köer och publicerar/prenumererar-semantik med ämnen och prenumerationer.
Det finns dock vissa skillnader mellan de två, som du ser i följande tabell:
| Kategori | ActiveMQ | Azure Service Bus |
|---|---|---|
| Programnivåindelad | Klustrad monolit | Två nivåer (gateway + backend) |
| Protokollstöd |
|
AMQP |
| Etableringsläge |
|
Hanterad plattform som en tjänst (PaaS) |
| Meddelandestorlek | Kunden kan konfigureras | 100 MB (Premium-nivå) |
| Hög tillgänglighet | Kund-hanterad | Plattforms hanterad |
| Haveriberedskap | Kund-hanterad | Plattforms hanterad |
Aktuella funktioner som stöds och inte stöds
I följande tabell visas DE JMS-funktioner (Java Message Service) som Azure Service Bus stöder för närvarande. Den visar även funktioner som inte stöds.
| Funktion | API | Status |
|---|---|---|
| Köer |
|
Stöds |
| Ämnen |
|
Stöds |
| Tillfälliga köer |
|
Stöds |
| Tillfälliga ämnen |
|
Stöds |
| Meddelandeproducent/ JMS Eng. |
|
Stöds |
| Köwebbläsare |
|
Stöds |
| Meddelandekonsument/ JMSConsumer |
noLocal stöds inte för närvarande |
Stöds |
| Delade beständiga prenumerationer |
|
Stöds |
| Icke-delade beständiga prenumerationer |
noLocal stöds inte för närvarande och bör anges till false |
Stöds |
| Delade icke-varaktiga prenumerationer |
|
Stöds |
| Icke-varaktiga prenumerationer som inte delats |
noLocal stöds inte för närvarande och bör anges till false |
Stöds |
| Meddelandeväljare | beror på vilken konsument som skapats | Stöds |
| Leveransfördröjning (schemalagda meddelanden) |
|
Stöds |
| Meddelandet har skapats |
|
Stöds |
| Transaktioner mellan entiteter |
|
Stöds |
| Distribuerade transaktioner | Stöds inte |
Överväganden
Den tvådelade typen av Azure-Service Bus har olika funktioner för affärskontinuiteter (hög tillgänglighet och haveriberedskap). Det finns dock några saker att tänka på när du använder JMS-funktioner.
Tjänstuppgraderingar
Om Service Bus uppgraderas och startas om tas tillfälliga köer eller ämnen bort. Om ditt program är känsligt för dataförlust i tillfälliga köer eller ämnen ska du inte använda tillfälliga köer eller ämnen. Använd beständiga köer, ämnen och prenumerationer i stället.
Datamigrering
Som en del av att migrera och ändra dina klientprogram så att de interagerar med Azure Service Bus migreras inte data som lagras i ActiveMQ till Service Bus. Du kan behöva ett anpassat program för att tömma ActiveMQ-köer, ämnen och prenumerationer och sedan spela upp meddelandena till köer, ämnen och prenumerationer för Service Bus.
Autentisering och auktorisering
Rollbaserad åtkomstkontroll i Azure (Azure RBAC), backad av Azure Active Directory, är den önskade autentiseringsmekanismen för Service Bus. Eftersom Azure RBAC, eller anspråksbaserad autentisering, för närvarande inte stöds av Apache QPID JMS bör du dock använda SAS-nycklar för autentisering.
Före migrering
Versionskontroll
Du använder följande komponenter och versioner när du skriver JMS-programmen:
| Komponent | Version |
|---|---|
| Java Message Service (JMS) API | 1.1 eller högre |
| AMQP-protokoll | 1.0 |
Kontrollera att AMQP-portarna är öppna
Service Bus stöder kommunikation via AMQP-protokollet. För detta ändamål aktiverar du kommunikation via portarna 5671 (AMQP) och 443 (TCP). Beroende på var klientprogrammen finns kan du behöva ett supportbegäran för att tillåta kommunikation via dessa portar.
Viktigt
Service Bus stöder endast AMQP 1.0-protokollet.
Konfigurera företagskonfigurationer
Service Bus aktiverar olika funktioner för företagssäkerhet och hög tillgänglighet. Mer information finns i:
- Tjänstslutpunkter för virtuellt nätverk
- Brandvägg
- Kryptering på tjänstsidan med kund hanterad nyckel (BYOK)
- Privata slutpunkter
- Autentisering och auktorisering
Övervakning, aviseringar och spårning
För varje Service Bus namnområde publicerar du mått till Azure Monitor. Du kan använda dessa mått för aviseringar och dynamisk skalning av resurser som allokerats till namnområdet.
Mer information om de olika måtten och hur du ställer in aviseringar för dem finns i Service Bus mått i Azure Monitor. Du kan också läsa mer om spårning på klientsidan för dataåtgärder och drift-/diagnostisk loggning för hanteringsåtgärder.
Mått – New Relic
Du kan korrelera vilka mått från ActiveMQ-kartan som måtten i Azure Service Bus. Se följande på New Relic webbplats:
Anteckning
För närvarande New Relic har ingen direkt, sömlös integrering med ActiveMQ, men de har mått tillgängliga för Amazon MQ. Eftersom Amazon MQ härleds från ActiveMQ mappar följande tabell New Relic mått från Amazon MQ till Azure Service Bus.
| Måttgruppering | Amazon MQ/ActiveMQ-mått | Azure Service Bus mått |
|---|---|---|
| Mäklare | CpuUtilization |
CPUXNS |
| Mäklare | MemoryUsage |
WSXNS |
| Mäklare | CurrentConnectionsCount |
activeConnections |
| Mäklare | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
| Mäklare | InactiveDurableTopicSubscribersCount |
Använda prenumerationsmått |
| Mäklare | TotalMessageCount |
Använda kö-/ämnes-/prenumerationsnivå activeMessages |
| Kö/ämne | EnqueueCount |
incomingMessages |
| Kö/ämne | DequeueCount |
outgoingMessages |
| Kö | QueueSize |
sizeBytes |
Migrering
Om du vill migrera ditt befintliga JMS 2.0-program för att interagera Service Bus, följer du stegen i nästa avsnitt.
Exportera topologin från ActiveMQ och skapa entiteterna i Service Bus (valfritt)
För att säkerställa att klientprogram smidigt kan ansluta till Service Bus migrerar du topologin (inklusive köer, ämnen och prenumerationer) från Apache ActiveMQ till Service Bus.
Anteckning
För JMS-program skapar du köer, ämnen och prenumerationer som en körningsåtgärd. De flesta JMS-leverantörer (a brokers för meddelanden) ger dig möjlighet att skapa dem vid körning. Det är därför det här exportsteget anses valfritt. Använd anslutningssträngen med SAS-behörigheter för att säkerställa att programmet har behörighet att skapa topologin vid Manage körning.
Gör så här:
- Använd ActiveMQ-kommandoradsverktygen för att exportera topologin.
- Skapa om samma topologi med hjälp av en Azure Resource Manager mall.
- Kör Azure Resource Manager mall.
Importera Maven-beroendet för Service Bus JMS-implementering
För att säkerställa sömlös anslutning Service Bus lägger du till azure-servicebus-jms paketet som ett beroende till Maven-filen enligt pom.xml följande:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Konfigurationsändringar för programserver
Den här delen är anpassad till den programserver som är värd för dina klientprogram som ansluter till ActiveMQ.
Spring-program
Uppdatera application.properties filen
Om du använder ett Spring Boot-program för att ansluta till ActiveMQ vill du ta bort de ActiveMQ-specifika egenskaperna från application.properties filen.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Lägg sedan till Service Bus specifika egenskaper i application.properties filen.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Ersätt ActiveMQConnectionFactory med ServiceBusJmsConnectionFactory
Nästa steg är att ersätta instansen av ActiveMQConnectionFactory med ServiceBusJmsConnectionFactory .
Anteckning
De faktiska kodändringarna är specifika för programmet och hur beroenden hanteras, men följande exempel ger vägledning om vad som ska ändras.
Tidigare kan du ha instansierat ett -objekt i ActiveMQConnectionFactory , enligt följande:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Nu ändrar du detta för att instansiera ett -objekt i ServiceBusJmsConnectionFactory , enligt följande:
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();
Efter migreringen
Nu när du har ändrat programmet så att det börjar skicka och ta emot meddelanden från Service Bus bör du kontrollera att det fungerar som förväntat. När det är klart kan du fortsätta med att ytterligare förfina och modernisera din programstack.
Nästa steg
Använd Spring Boot Starter för Azure Service Bus JMS för sömlös integrering med Service Bus.
Mer information om Service Bus och JMS finns i: