Bestaande Java Message Service (JMS) 2.0-toepassingen migreren van Apache ActiveMQ naar Azure Service Bus
In dit artikel wordt beschreven hoe u een bestaande Java Message Service (JMS) 2.0-toepassing wijzigt die communiceert met een JMS Broker om in plaats daarvan te communiceren met Azure Service Bus. In het artikel wordt met name beschreven hoe u migreert van Apache ActiveMQ of Amazon MQ.
Azure Service Bus ondersteunt Java 2 Platform-, Enterprise Edition- en Spring-workloads die gebruikmaken van de JMS 2.0-API via Advanced Message Queueing Protocol (AMQP).
Voordat u begint
Verschillen tussen Azure Service Bus en Apache ActiveMQ
Azure Service Bus en Apache ActiveMQ zijn beide berichtbrokers, die functioneren als JMS-providers voor clienttoepassingen om berichten te verzenden naar en te ontvangen van. Ze maken zowel punt-naar-punt-semantiek met wachtrijen mogelijk en publiceren-abonneren-semantiek met onderwerpen en abonnementen.
Er zijn echter enkele verschillen tussen de twee, zoals in de volgende tabel wordt weergegeven:
Categorie | ActiveMQ | Azure Service Bus |
---|---|---|
Toepassingslagen | Geclusterde monolith | Twee lagen (gateway + back-end) |
Protocolondersteuning |
|
AMQP |
Inrichtingsmodus |
|
Beheerd platform als een dienst (PaaS) |
Berichtgrootte | Klant configureerbaar | 100 MB (Premium-laag) |
Hoge beschikbaarheid | Door de klant beheerd | Platform beheerd |
Herstel na noodgeval | Door de klant beheerd | Platform beheerd |
Huidige ondersteunde en niet-ondersteunde functies
De volgende tabel bevat de JMS-functies (Java Message Service) die momenteel door Azure Service Bus worden ondersteund. Ook worden functies weergegeven die niet worden ondersteund.
Functie | API | Status |
---|---|---|
Wachtrijen |
|
Ondersteund |
Onderwerpen |
|
Ondersteund |
Tijdelijke wachtrijen |
|
Ondersteund |
Tijdelijke onderwerpen |
|
Ondersteund |
Berichtproducent / JMSProducer |
|
Ondersteund |
Wachtrijbrowsers |
|
Ondersteund |
Berichtconsumer/ JMSConsumer |
noLocal wordt momenteel niet ondersteund |
Ondersteund |
Gedeelde duurzame abonnementen |
|
Ondersteund |
Niet-gedeelde duurzame abonnementen |
noLocal wordt momenteel niet ondersteund en moet worden ingesteld op false |
Ondersteund |
Gedeelde niet-duurzame abonnementen |
|
Ondersteund |
Niet-gedeelde niet-duurzame abonnementen |
noLocal wordt momenteel niet ondersteund en moet worden ingesteld op false |
Ondersteund |
Berichtkiezers | is afhankelijk van de consument die is gemaakt | Ondersteund |
Bezorgingsvertraging (geplande berichten) |
|
Ondersteund |
Bericht gemaakt |
|
Ondersteund |
Transacties tussen entiteiten |
|
Ondersteund |
Gedistribueerde transacties | Niet ondersteund |
Overwegingen
De tweelaagse aard van Azure Service Bus biedt verschillende bedrijfscontinuïteitsmogelijkheden (hoge beschikbaarheid en herstel na noodgevallen). Er zijn echter enkele overwegingen wanneer u JMS-functies gebruikt.
Service-upgrades
In het geval van service bus-upgrades en -herstarts, worden tijdelijke wachtrijen of onderwerpen verwijderd. Als uw toepassing gevoelig is voor gegevensverlies in tijdelijke wachtrijen of onderwerpen, gebruikt u geen tijdelijke wachtrijen of onderwerpen. Gebruik in plaats daarvan duurzame wachtrijen, onderwerpen en abonnementen.
Gegevensmigratie
Als onderdeel van het migreren en wijzigen van uw clienttoepassingen om te communiceren met Azure Service Bus, worden de gegevens in ActiveMQ niet gemigreerd naar Service Bus. Mogelijk hebt u een aangepaste toepassing nodig om de ActiveMQ-wachtrijen, onderwerpen en abonnementen leeg te maken en de berichten vervolgens opnieuw af te spelen op de wachtrijen, onderwerpen en abonnementen van Service Bus.
Verificatie en autorisatie
Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC), ondersteund door Microsoft Entra ID, is het voorkeursverificatiemechanisme voor Service Bus. Als u op rollen gebaseerd toegangsbeheer wilt inschakelen, volgt u de stappen in de ontwikkelaarshandleiding voor Azure Service Bus JMS 2.0.
Premigratie
Versiecontrole
U gebruikt de volgende onderdelen en versies tijdens het schrijven van de JMS-toepassingen:
Onderdeel | Versie |
---|---|
JMS-API (Java Message Service) | 1.1 of hoger |
AMQP-protocol | 1.0 |
Zorg ervoor dat AMQP-poorten zijn geopend
Service Bus ondersteunt communicatie via het AMQP-protocol. Hiervoor schakelt u communicatie via poorten 5671 (AMQP) en 443 (TCP) in. Afhankelijk van waar de clienttoepassingen worden gehost, hebt u mogelijk een ondersteuningsticket nodig om communicatie via deze poorten toe te staan.
Belangrijk
Service Bus ondersteunt alleen het AMQP 1.0-protocol.
Bedrijfsconfiguraties instellen
Service Bus maakt verschillende functies voor bedrijfsbeveiliging en hoge beschikbaarheid mogelijk. Zie voor meer informatie:
- Service-eindpunten voor virtueel netwerk
- Firewall
- Versleuteling aan de servicezijde met door de klant beheerde sleutel (BYOK)
- Privé-eindpunten
- Verificatie en autorisatie
Bewaking, waarschuwingen en tracering
Voor elke Service Bus-naamruimte publiceert u metrische gegevens naar Azure Monitor. U kunt deze metrische gegevens gebruiken voor waarschuwingen en dynamisch schalen van resources die zijn toegewezen aan de naamruimte.
Zie Service Bus-metrische gegevens in Azure Monitor voor meer informatie over de verschillende metrische gegevens en het instellen van waarschuwingen. U vindt ook meer informatie over tracering aan de clientzijde voor gegevensbewerkingen en operationele/diagnostische logboekregistratie voor beheerbewerkingen.
Metrische gegevens - New Relic
U kunt correleren welke metrische gegevens van ActiveMQ zijn toegewezen aan welke metrische gegevens in Azure Service Bus. Zie het volgende op de Website van New Relic:
Notitie
Op dit moment heeft New Relic geen directe, naadloze integratie met ActiveMQ, maar ze hebben wel metrische gegevens die beschikbaar zijn voor Amazon MQ. Omdat Amazon MQ is afgeleid van ActiveMQ, wijst de volgende tabel de metrische gegevens van New Relic toe van Amazon MQ naar Azure Service Bus.
Groeperen van metrische gegevens | Metrische gegevens amazon MQ/ActiveMQ | Metrische gegevens van Azure Service Bus |
---|---|---|
Broker | CpuUtilization |
CPUXNS |
Broker | MemoryUsage |
WSXNS |
Broker | CurrentConnectionsCount |
activeConnections |
Broker | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Broker | InactiveDurableTopicSubscribersCount |
Metrische abonnementsgegevens gebruiken |
Broker | TotalMessageCount |
Wachtrij-/onderwerp-/abonnementsniveau gebruiken activeMessages |
Wachtrij/onderwerp | EnqueueCount |
incomingMessages |
Wachtrij/onderwerp | DequeueCount |
outgoingMessages |
Wachtrij | QueueSize |
sizeBytes |
Migratie
Als u uw bestaande JMS 2.0-toepassing wilt migreren om te communiceren met Service Bus, volgt u de stappen in de volgende secties.
De topologie exporteren vanuit ActiveMQ en de entiteiten maken in Service Bus (optioneel)
Om ervoor te zorgen dat clienttoepassingen naadloos verbinding kunnen maken met Service Bus, migreert u de topologie (inclusief wachtrijen, onderwerpen en abonnementen) van Apache ActiveMQ naar Service Bus.
Notitie
Voor JMS-toepassingen maakt u wachtrijen, onderwerpen en abonnementen als runtimebewerking. De meeste JMS-providers (berichtenbrokers) bieden u de mogelijkheid om deze tijdens runtime te maken. Daarom wordt deze exportstap als optioneel beschouwd. Gebruik de verbindingsreeks met SAS-machtigingen Manage
om ervoor te zorgen dat uw toepassing de machtigingen heeft om de topologie tijdens runtime te maken.
Dit doet u als volgt:
- Gebruik de ActiveMQ-opdrachtregelprogramma's om de topologie te exporteren.
- Maak dezelfde topologie opnieuw met behulp van een Azure Resource Manager-sjabloon.
- Voer de Azure Resource Manager-sjabloon uit.
De maven-afhankelijkheid importeren voor Service Bus JMS-implementatie
Om naadloze connectiviteit met Service Bus te garanderen, voegt u het azure-servicebus-jms
pakket als een afhankelijkheid toe aan het Maven-bestand pom.xml
, als volgt:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Wijzigingen in de configuratie van de toepassingsserver
Dit onderdeel is aangepast aan de toepassingsserver die als host fungeert voor uw clienttoepassingen die verbinding maken met ActiveMQ.
Spring-toepassingen
Het bestand bijwerken application.properties
Als u een Spring Boot-toepassing gebruikt om verbinding te maken met ActiveMQ, wilt u de activeMQ-specifieke eigenschappen uit het application.properties
bestand verwijderen.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Voeg vervolgens de Service Bus-specifieke eigenschappen toe aan het application.properties
bestand.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Vervang ActiveMQConnectionFactory
door ServiceBusJmsConnectionFactory
De volgende stap is het vervangen van het exemplaar van ActiveMQConnectionFactory
de ServiceBusJmsConnectionFactory
.
Notitie
De daadwerkelijke codewijzigingen zijn specifiek voor de toepassing en hoe afhankelijkheden worden beheerd, maar het volgende voorbeeld bevat de richtlijnen voor wat moet worden gewijzigd.
Eerder hebt u mogelijk als volgt een exemplaar gemaakt van een object:ActiveMQConnectionFactory
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
U wijzigt dit nu als volgt om een object van ServiceBusJmsConnectionFactory
, als volgt te instantiëren:
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();
Postmigratie
Nu u de toepassing hebt gewijzigd om te beginnen met het verzenden en ontvangen van berichten van Service Bus, moet u controleren of deze werkt zoals verwacht. Wanneer dat is gebeurd, kunt u doorgaan met het verfijnen en moderniseren van uw toepassingsstack.
Volgende stappen
Gebruik Spring Boot Starter voor Azure Service Bus JMS voor naadloze integratie met Service Bus.
Zie voor meer informatie over Service Bus-berichten en JMS: