Migrieren vorhandener JMS 2.0-Anwendungen (Java Message Service) von Apache ActiveMQ zu Azure Service Bus
In diesem Artikel wird erläutert, wie eine vorhandene JMS 2.0-Anwendung (Java Message Service), die mit einem JMS-Broker interagiert, so geändert wird, dass sie stattdessen mit Azure Service Bus interagiert. Insbesondere wird im Artikel die Migration von Apache ActiveMQ oder Amazon MQ behandelt.
Azure Service Bus unterstützt Java 2-, Enterprise Edition- und Spring-Workloads, die die JMS 2.0-API über AMQP (Advanced Message Queueing Protocol) nutzen.
Vorbereitung
Unterschiede zwischen Azure Service Bus und Apache ActiveMQ
Sowohl Azure Service Bus als auch Apache ActiveMQ sind Nachrichtenbroker, die als JMS-Anbieter fungieren, sodass Clientanwendungen Nachrichten senden und empfangen können. Beide ermöglichen Punkt-zu-Punkt-Semantik mit Warteschlangen und Veröffentlichen-Abonnieren-Semantik mit Themen und Abonnements.
Dennoch gibt es einige Unterschiede zwischen den beiden Nachrichtenbrokern, wie in der folgenden Tabelle zu sehen ist:
Category | ActiveMQ | Azure Service Bus |
---|---|---|
Anwendungstiering | Gruppiert monolithisch | Zweistufig (Gateway und Back-End) |
Protokollunterstützung |
|
AMQP |
Bereitstellungsmodus |
|
Verwaltete Platform as a Service (PaaS) |
Nachrichtengröße | Vom Benutzer konfigurierbar | 100 MB (Premium-Tarif) |
Hochverfügbarkeit | Vom Kunden verwaltet | Von der Plattform verwaltet |
Notfallwiederherstellung | Vom Kunden verwaltet | Von der Plattform verwaltet |
Zurzeit unterstützte und nicht unterstützte Funktionen
In der folgenden Tabelle sind die zurzeit von Azure Service Bus unterstützten JMS-Funktionen (Java Message Service) aufgelistet. Außerdem werden Funktionen angezeigt, die nicht unterstützt werden.
Funktion | API | Status |
---|---|---|
Warteschlangen |
|
Unterstützt |
Themen |
|
Unterstützt |
Temporäre Warteschlangen |
|
Unterstützt |
Temporäre Themen |
|
Unterstützt |
Message Producer / JMSProducer |
|
Unterstützt |
Warteschlangenbrowser |
|
Unterstützt |
Message Consumer/ JMSConsumer |
„noLocal“ wird zurzeit nicht unterstützt. |
Unterstützt |
Freigegebene dauerhafte Abonnements |
|
Unterstützt |
Nicht freigegebene dauerhafte Abonnements |
„noLocal“ wird zurzeit nicht unterstützt und sollte auf „false“ festgelegt werden. |
Unterstützt |
Freigegebene nicht dauerhafte Abonnements |
|
Unterstützt |
Nicht freigegebene nicht dauerhafte Abonnements |
„noLocal“ wird zurzeit nicht unterstützt und sollte auf „false“ festgelegt werden. |
Unterstützt |
Nachrichtenselektoren | Abhängig vom erstellten Consumer. | Unterstützt |
Tägliche Zustellung (geplante Nachrichten) |
|
Unterstützt |
Nachricht erstellt |
|
Unterstützt |
Entitätsübergreifende Transaktionen |
|
Unterstützt |
Verteilte Transaktionen | Nicht unterstützt |
Überlegungen
Die zweistufige Natur von Azure Service Bus bietet verschiedene Funktionen für Geschäftskontinuität (Hochverfügbarkeit und Notfallwiederherstellung). Bei der Verwendung von JMS-Features gibt es jedoch einige Überlegungen zu beachten.
Dienstupgrades
Bei Service Bus-Upgrades und -Neustarts werden temporäre Warteschlangen und Themen gelöscht. Wenn Ihre Anwendung gegenüber dem Verlust von Daten in temporären Warteschlangen oder Themen empfindlich ist, verwenden Sie keine temporären Warteschlangen oder Themen. Verwenden Sie stattdessen dauerhafte Warteschlangen, Themen und Abonnements.
Datenmigration
Im Rahmen der Migration und Änderung von Clientanwendungen für die Interaktion mit Azure Service Bus werden die in ActiveMQ gespeicherten Daten nicht zu Service Bus migriert. Möglicherweise benötigen Sie eine benutzerdefinierte Anwendung, die ActiveMQ-Warteschlangen, -Themen und -Abonnements entfernt und die Nachrichten in Warteschlangen, Themen und Abonnements von Service Bus erneut wiedergibt.
Authentifizierung und Autorisierung
Die von Microsoft Entra ID unterstützte rollenbasierte Zugriffssteuerung in Azure (Role Based Access Control, RBAC) ist der bevorzugte Authentifizierungsmechanismus für Service Bus. Führen Sie zum Aktivieren der rollenbasierten Zugriffssteuerung die Schritte im Entwicklerleitfaden für Azure Service Bus JMS 2.0 aus.
Vor der Migration
Versionsüberprüfung
Beim Schreiben der JMS-Anwendungen verwenden Sie die folgenden Komponenten und Versionen:
Komponente | Version |
---|---|
JMS-API (Java Message Service) | 1.1 oder höher |
AMQP-Protokoll | 1.0 |
Stellen Sie sicher, dass AMQP-Ports geöffnet sind.
Service Bus unterstützt die Kommunikation über das AMQP-Protokoll. Aktivieren Sie zu diesem Zweck die Kommunikation über die Ports 5671 (AMQP) und 443 (TCP). Abhängig davon, wo die Clientanwendungen gehostet werden, benötigen Sie möglicherweise ein Supportticket, um die Kommunikation über diese Ports zuzulassen.
Wichtig
Service Bus unterstützt nur das AMQP 1.0-Protokoll.
Einrichten von Unternehmenskonfigurationen
Service Bus bietet verschiedene Features für Unternehmenssicherheit und Hochverfügbarkeit. Weitere Informationen finden Sie unter
- VNET-Dienstendpunkte
- Firewall
- Dienstseitige Verschlüsselung mit kundenseitig verwaltetem Schlüssel (BYOK)
- Private Endpunkte
- Authentifizierung und Autorisierung
Überwachung, Warnungen und Ablaufverfolgung
Für jeden Service Bus-Namespace veröffentlichen Sie Metriken in Azure Monitor. Sie können diese Metriken für Warnungen und die dynamische Skalierung von Ressourcen verwenden, die dem Namespace zugeordnet sind.
Weitere Informationen zu den verschiedenen Metriken und zum Einrichten von Warnungen für diese finden Sie unter Service Bus-Metriken in Azure Monitor. Sie finden auch zu clientseitiger Ablaufverfolgung für Datenvorgänge und Betriebs-/Diagnoseprotokollierung für Verwaltungsvorgänge weitere Informationen.
Metriken – New Relic
Sie können die Metriken von ActiveMQ Metriken in Azure Service Bus zuordnen. Weitere Informationen finden Sie in den folgenden Artikeln auf der New Relic-Website:
Hinweis
Derzeit verfügt New Relic nicht über direkte nahtlose Integration mit ActiveMQ, es sind jedoch Metriken für Amazon MQ verfügbar. Da Amazon MQ von ActiveMQ abgeleitet ist, ordnet die nachstehende Tabelle die New Relic-Metriken von Amazon MQ Azure Service Bus zu.
Metrikgruppierung | Metrik für Amazon MQ/ActiveMQ | Azure Service Bus-Metrik |
---|---|---|
Broker | CpuUtilization |
CPUXNS |
Broker | MemoryUsage |
WSXNS |
Broker | CurrentConnectionsCount |
activeConnections |
Broker | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Broker | InactiveDurableTopicSubscribersCount |
Verwenden von Metriken für Abonnements |
Broker | TotalMessageCount |
Verwenden der Warteschlangen-/Thema-/Abonnementebene activeMessages |
Warteschlange/Thema | EnqueueCount |
incomingMessages |
Warteschlange/Thema | DequeueCount |
outgoingMessages |
Warteschlange | QueueSize |
sizeBytes |
Migration
Führen Sie die Schritte in den nächsten Abschnitten aus, um Ihre vorhandene JMS 2.0-Anwendung für die Interaktion mit Service Bus zu migrieren.
Exportieren der Topologie aus ActiveMQ und Erstellen der Entitäten in Service Bus (optional)
Um sicherzustellen, dass die Clientanwendungen nahtlos eine Verbindung mit Service Bus herstellen können, migrieren Sie die Topologie (einschließlich Warteschlangen, Themen und Abonnements) von Apache ActiveMQ zu Service Bus.
Hinweis
Für JMS-Anwendungen erstellen Sie Warteschlangen, Themen und Abonnements als Laufzeitvorgang. Die meisten JMS-Anbieter (Nachrichtenbroker) bieten die Möglichkeit, sie zur Laufzeit zu erstellen. Daher wird dieser Exportschritt als optional eingestuft. Um sicherzustellen, dass Ihre Anwendung über die Berechtigungen zum Erstellen der Topologie zur Laufzeit verfügt, verwenden Sie die Verbindungszeichenfolge mit den SAS-Berechtigungen Manage
.
Gehen Sie dazu folgendermaßen vor:
- Verwenden Sie die ActiveMQ-Befehlszeilentools, um die Topologie zu exportieren.
- Erstellen Sie die gleiche Topologie mit einer Azure Resource Manager-Vorlage erneut.
- Führen Sie die Azure Resource Manager-Vorlage aus.
Importieren der Maven-Abhängigkeit für die Service Bus JMS-Implementierung
Um eine nahtlose Verbindung mit Service Bus sicherzustellen, fügen Sie das Paket azure-servicebus-jms
wie folgt der Maven-Datei pom.xml
als Abhängigkeit hinzu:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Änderungen der Anwendungsserverkonfiguration
Dieser Teil ist für den Anwendungsserver angepasst, auf dem Ihre Clientanwendungen gehostet werden, die eine Verbindung mit ActiveMQ herstellen.
Spring-Anwendungen
Aktualisieren Sie die Datei application.properties
.
Wenn Sie eine Spring Boot-Anwendung zum Herstellen einer Verbindung mit ActiveMQ verwenden, sollten Sie die ActiveMQ-spezifischen Eigenschaften aus der Datei application.properties
entfernen.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Fügen Sie dann der Datei application.properties
die für Service Bus spezifischen Eigenschaften hinzu.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Ersetzen Sie ActiveMQConnectionFactory
durch ServiceBusJmsConnectionFactory
.
Der nächste Schritt besteht im Ersetzen der Instanz von ActiveMQConnectionFactory
durch ServiceBusJmsConnectionFactory
.
Hinweis
Die tatsächlichen Codeänderungen sind spezifisch für die Anwendung und die Art der Verwaltung von Abhängigkeiten, das nachstehende Beispiel enthält jedoch eine Anleitung zu den sinnvollen Änderungen.
Zuvor haben Sie möglicherweise ein ActiveMQConnectionFactory
-Objekt wie folgt instanziiert:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Nun ändern Sie dies, sodass ein ServiceBusJmsConnectionFactory
-Objekt wie folgt instanziiert wird:
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();
Nach der Migration
Da Sie die Anwendung nun so geändert haben, dass sie mit dem Senden von Nachrichten an und Empfangen von Nachrichten von Service Bus beginnt, sollten Sie überprüfen, ob sie erwartungsgemäß funktioniert. Wenn das erledigt ist, können Sie den Anwendungsstapel weiter verfeinern und modernisieren.
Nächste Schritte
Verwenden Sie Spring Boot-Starter für Azure Service Bus JMS für die nahtlose Integration mit Service Bus.
Weitere Informationen zu Service Bus-Messaging und JMS finden Sie unter: