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 bijzonder bevat het artikel de migratie 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 berichtenbrokers die als JMS-providers werken voor clienttoepassingen om berichten naar te verzenden en van te ontvangen. Ze maken beide de point-to-point-semantiek met wachtrijen mogelijk en publiceren-abonneren semantiek met onderwerpen en abonnementen.
Er zijn echter enkele verschillen tussen de twee, zoals de volgende tabel laat zien:
| Categorie | ActiveMQ | Azure Service Bus |
|---|---|---|
| Opslag in toepassingslagen | Geclusterde monoliet | Twee lagen (gateway + back-end) |
| Protocolondersteuning |
|
AMQP |
| Inrichtingsmodus |
|
Beheerde platform as a service (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 Java Message Service-functies (JMS) die momenteel Service Bus Azure-service. U ziet ook functies die niet worden ondersteund.
| Functie | API | Status |
|---|---|---|
| Wachtrijen |
|
Ondersteund |
| Onderwerpen |
|
Ondersteund |
| Tijdelijke wachtrijen |
|
Ondersteund |
| Tijdelijke onderwerpen |
|
Ondersteund |
| Berichtproducent / JMSProducer |
|
Ondersteund |
| Wachtrijbrowsers |
|
Ondersteund |
| Bericht consumer/ JMSConsumer |
noLocal wordt momenteel niet ondersteund |
Ondersteund |
| Gedeelde duurzame abonnementen |
|
Ondersteund |
| Niet-gedeeld 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 |
| Berichtverdelers | is afhankelijk van de gemaakte consument | Ondersteund |
| Vertraging bij levering (geplande berichten) |
|
Ondersteund |
| Bericht gemaakt |
|
Ondersteund |
| Transacties tussen entiteiten |
|
Ondersteund |
| Gedistribueerde transacties | Niet ondersteund |
Overwegingen
De tweelaagse aard van Azure Service Bus verschillende mogelijkheden voor bedrijfscontinuïteit (hoge beschikbaarheid en herstel na noodgevallen). Er zijn echter enkele overwegingen bij het gebruik van JMS-functies.
Service-upgrades
In het geval van service bus-upgrades en opnieuw opstarten, 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 die zijn opgeslagen 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), dat wordt Azure Active Directory, is het voorkeursverificatiemechanisme voor Service Bus. Omdat Azure RBAC, of verificatie op basis van een claim, momenteel niet wordt ondersteund door Apache QPID JMS, moet u echter SAS-sleutels gebruiken voor verificatie.
Premigratie
Versiecontrole
U gebruikt de volgende onderdelen en versies tijdens het schrijven van de JMS-toepassingen:
| Onderdeel | Versie |
|---|---|
| Java Message Service (JMS) API | 1,1 of hoger |
| AMQP-protocol | 1.0 |
Controleren of DE AMQP-poorten zijn geopend
Service Bus ondersteunt communicatie via het AMQP-protocol. Schakel hiervoor communicatie in via de poorten 5671 (AMQP) en 443 (TCP). 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 Metrische gegevens in Service Bus voor meer informatie over de verschillende metrische gegevens en het instellen van waarschuwingen Azure Monitor. U kunt ook meer informatie vinden 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 gekoppeld aan welke metrische gegevens in Azure Service Bus. Zie het volgende op de New Relic website:
- Metrische gegevens van ActiveMQ/Amazon MQ New Relic
- Metrische gegevens Service Bus New Relic Azure-gegevens
Notitie
Op dit New Relic geen directe, naadloze integratie met ActiveMQ, maar ze hebben wel metrische gegevens beschikbaar voor Amazon MQ. Omdat Amazon MQ is afgeleid van ActiveMQ, worden in de volgende tabel de New Relic metrische gegevens van Amazon MQ aan Azure Service Bus.
| Groeperen van metrische gegevens | Amazon MQ/ActiveMQ-metrische gegevens | Metrische Service Bus Azure-gegevens |
|---|---|---|
| Makelaar | CpuUtilization |
CPUXNS |
| Makelaar | MemoryUsage |
WSXNS |
| Makelaar | CurrentConnectionsCount |
activeConnections |
| Makelaar | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
| Makelaar | InactiveDurableTopicSubscribersCount |
Metrische gegevens van abonnement gebruiken |
| Makelaar | 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 voor interactie 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 een runtimebewerking. De meeste JMS-providers (berichtenbrokers) bieden u de mogelijkheid om deze te maken tijdens runtime. Daarom wordt deze exportstap als optioneel beschouwd. Om ervoor te zorgen dat uw toepassing de machtigingen heeft om de topologie tijdens runtime te maken, gebruikt u de connection string Manage sas-machtigingen.
Om dit te doen:
- Gebruik de ActiveMQ-opdrachtregelprogramma's om de topologie te exporteren.
- Maak dezelfde topologie opnieuw met behulp van een Azure Resource Manager sjabloon.
- Voer de sjabloon Azure Resource Manager uit.
De Maven-afhankelijkheid importeren voor Service Bus JMS-implementatie
Voor naadloze connectiviteit met Service Bus voegt u het pakket als een afhankelijkheid toe aan azure-servicebus-jms het pom.xml Maven-bestand, 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 voor uw clienttoepassingen verbinding maakt met ActiveMQ.
Spring-toepassingen
Het bestand application.properties bijwerken
Als u een Spring Boot-toepassing gebruikt om verbinding te maken met ActiveMQ, wilt u de specifieke ActiveMQ-eigenschappen uit het bestand application.properties verwijderen.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Voeg vervolgens de specifieke Service Bus 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 ActiveMQConnectionFactory van door de ServiceBusJmsConnectionFactory .
Notitie
De werkelijke codewijzigingen zijn specifiek voor de toepassing en hoe afhankelijkheden worden beheerd, maar het volgende voorbeeld bevat richtlijnen voor wat er moet worden gewijzigd.
Eerder hebt u mogelijk als volgt een instantiërend object van ActiveMQConnectionFactory gemaakt:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Nu gaat u dit wijzigen om als volgt een instantie van een object van ServiceBusJmsConnectionFactory te maken:
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 berichten te verzenden en te ontvangen van Service Bus, moet u controleren of deze werkt zoals verwacht. Wanneer dat is gebeurd, kunt u doorgaan met het verder verfijnen en moderniseren van uw toepassingsstack.
Volgende stappen
Gebruik de Spring Boot Starter voor Azure Service Bus JMS voor naadloze integratie met Service Bus.
Zie voor meer informatie over Service Bus messaging en JMS: