Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Handbuch enthält detaillierte Informationen, die Ihnen helfen, mithilfe der Java Message Service Service (JMS) 2.0-API erfolgreich mit Azure Service Bus zu kommunizieren.
Als Java-Entwickler sollten Sie, wenn Sie mit Azure Service Bus noch nicht vertraut sind, die folgenden Artikel lesen.
Erste Schritte | Konzepte |
---|---|
Java Message Service (JMS)-Programmiermodell
Das Java Message Service-API-Programmiermodell ist wie in den folgenden Abschnitten dargestellt:
Hinweis
Die Azure Service Bus Premium-Stufe unterstützt JMS 1.1 und JMS 2.0.
Azure Service Bus – Standardebene unterstützt eingeschränkte JMS 1.1-Funktionalität. Weitere Informationen finden Sie in dieser Dokumentation.
JMS - Bausteine
Die folgenden Bausteine stehen für die Kommunikation mit der JMS-Anwendung zur Verfügung.
Hinweis
Der folgende Leitfaden wurde aus dem Oracle Java EE 6-Lernprogramm für Java Message Service (JMS) angepasst.
Das Verweisen auf dieses Lernprogramm wird empfohlen, um das Verständnis des Java Message Service (JMS) zu verbessern.
Verbindungsfactory
Das Verbindungsfactoryobjekt wird vom Client verwendet, um eine Verbindung mit dem JMS-Anbieter herzustellen. Die Verbindungsfabrik kapselt eine Reihe von Verbindungskonfigurationsparametern, die vom Administrator festgelegt sind.
Jede Verbindungsfactory ist eine Instanz von ConnectionFactory
, QueueConnectionFactory
oder TopicConnectionFactory
Schnittstellen.
Um die Verbindung mit Azure Service Bus zu vereinfachen, werden diese Schnittstellen über ServiceBusJmsConnectionFactory
, ServiceBusJmsQueueConnectionFactory
oder ServiceBusJmsTopicConnectionFactory
entsprechend implementiert.
Von Bedeutung
Java-Anwendungen, die JMS 2.0-API nutzen, können mithilfe der Verbindungszeichenfolge eine Verbindung mit Azure Service Bus herstellen oder eine TokenCredential
Für die Nutzung der von Microsoft Entra gesicherten Authentifizierung verwenden. Stellen Sie bei verwendung der von Microsoft Entra gesicherten Authentifizierung sicher, dass Sie der Identität bei Bedarf Rollen und Berechtigungen zuweisen .
- Systemseitig zugewiesene verwaltete Identität
- Benutzerseitig zugewiesene verwaltete Identität
- Dienstprinzipal
- Authentifizierung der Verbindungszeichenfolge
Erstellen Sie eine systemseitig zugewiesene verwaltete Identität in Azure, und verwenden Sie diese Identität zum Erstellen von TokenCredential
.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
Die Verbindungsfabrik kann dann mit den folgenden Parametern initialisiert werden.
- Tokenanmeldedaten – Ein Berechtigungsnachweis, der in der Lage ist, ein OAuth-Token bereitzustellen.
- Host: Der Hostname des Namespace auf Premium-Ebene von Azure Service Bus.
- ServiceBusJmsConnectionFactorySettings-Eigenschaftenbehälter, der Folgendes enthält
- connectionIdleTimeoutMS – Leerlauf-Verbindungstimeout in Millisekunden.
- traceFrames – boolesches Flag zur Sammlung von AMQP-Trace-Frames für das Debuggen.
- andere Konfigurationsparameter
Die Factory kann wie hier gezeigt erstellt werden. Die Tokenanmeldeinformationen und der Host sind erforderliche Parameter, aber die anderen Eigenschaften sind optional.
String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null);
JMS-Ziel
Ein Ziel ist das Objekt, das ein Client verwendet, um das Ziel der von ihr erzeugten Nachrichten und die Quelle der von ihr verbrauchten Nachrichten anzugeben.
Ziele sind Entitäten in Azure Service Bus zugeordnet: Warteschlangen (in Punkt-zu-Punkt-Szenarien) und Themen (in Szenarien mit dem Muster „Veröffentlichen-Abonnieren“).
Verbindungen
Eine Verbindung umfasst eine virtuelle Verbindung zu einem JMS-Anbieter. Mit Azure Service Bus stellt es eine zustandsbehaftete Verbindung zwischen der Anwendung und dem Azure Service Bus über AMQP dar.
Eine Verbindung wird aus der Verbindungsfabrik erstellt, wie im folgenden Beispiel gezeigt:
Connection connection = factory.createConnection();
Sitzungen
Eine Sitzung ist ein Einzelthreadkontext zum Erstellen und Nutzen von Nachrichten. Sie kann zum Erstellen von Nachrichten sowie Nachrichtenproducern und -consumern verwendet werden, bietet aber auch einen Transaktionskontext, um Sende- und Empfangsvorgänge in eine atomische Arbeitseinheit zu gruppieren.
Eine Sitzung kann aus dem Verbindungsobjekt erstellt werden, wie im folgenden Beispiel gezeigt:
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Hinweis
Die JMS-API unterstützt das Empfangen von Nachrichten von Service Bus-Warteschlangen oder -Themen mit aktivierten Messagingsitzungen nicht.
Sitzungsmodi
Eine Sitzung kann mit einem der folgenden Modi erstellt werden.
Sitzungsmodi | Verhalten |
---|---|
Session.AUTO_ACKNOWLEDGE | Die Sitzung bestätigt automatisch den Empfang einer Nachricht eines Clients, entweder wenn die Sitzung erfolgreich von einem Empfangsaufruf zurückkehrt oder wenn der von der Sitzung aufgerufene Nachrichtenlistener die Nachricht erfolgreich verarbeitet. |
Session.CLIENT_ACKNOWLEDGE | Der Client bestätigt eine genutzte Nachricht durch Aufrufen der Bestätigungsmethode der Nachricht. |
Session.DUPS_OK_ACKNOWLEDGE | Dieser Bestätigungsmodus weist die Sitzung an, die Übermittlung von Nachrichten verzögert zu bestätigen. |
Session.SESSION_TRANSACTED | Dieser Wert kann als Argument an die Methode createSession(int sessionMode) des Connection-Objekts übergeben werden, um anzugeben, dass die Sitzung eine lokale Transaktion verwenden soll. |
Wenn der Sitzungsmodus nicht angegeben ist, wird die Session.AUTO_ACKNOWLEDGE standardmäßig ausgewählt.
JMSContext
Hinweis
JMSContext wird als Teil der JMS 2.0-Spezifikation definiert.
JMSContext kombiniert die vom Verbindungs- und Sitzungsobjekt bereitgestellte Funktionalität. Dieser Kontext kann aus dem Verbindungsfactoryobjekt erstellt werden.
JMSContext context = connectionFactory.createContext();
JMSContext-Modi
Genau wie das Session-Objekt kann der JMSContext mit den gleichen Anerkennungsmodi erstellt werden, wie im Sitzungsmodus erwähnt.
JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);
Wenn der Modus nicht angegeben ist, wird der JMSContext.AUTO_ACKNOWLEDGE standardmäßig ausgewählt.
JMS-Nachrichtenproduzenten
Ein Nachrichtenproduzent ist ein Objekt, das mit einem JMSContext oder einer Session erstellt und zum Senden von Nachrichten an ein Ziel verwendet wird.
Sie kann entweder als eigenständiges Objekt erstellt werden, wie im folgenden Beispiel gezeigt:
JMSProducer producer = context.createProducer();
Oder sie wird zur Laufzeit erstellt, wenn eine Nachricht gesendet werden muss.
context.createProducer().send(destination, message);
JMS-Nachrichtenconsumer
Ein Nachrichtenanwender ist ein Objekt, das von einem JMSContext oder einer Session erstellt wird und zum Empfangen von Nachrichten verwendet wird, die an ein Ziel gesendet werden. Sie kann wie in diesem Beispiel dargestellt erstellt werden:
JMSConsumer consumer = context.createConsumer(dest);
Synchrone Empfangsvorgänge über receive()-Methode
Der Nachrichtenanwender bietet eine synchrone Möglichkeit, Nachrichten vom Ziel über die receive()
Methode zu empfangen.
Wenn keine Argumente und kein Zeitlimit festgelegt wurden oder wenn für das Zeitlimit der Wert 0 angegeben wurde, blockiert der Consumer unendlich lange, es sei denn, die Nachricht trifft ein oder die Verbindung wird getrennt (je nachdem, welches Ereignis früher eintritt).
Message m = consumer.receive();
Message m = consumer.receive(0);
Wenn ein positives Argument ungleich 0 angegeben wird, blockiert der Consumer so lange, bis dieser Timer abgelaufen ist.
Message m = consumer.receive(1000); // time out after one second.
Asynchroner Empfang mit JMS-Nachrichtenlistenern
Ein Nachrichtenlistener ist ein Objekt, das für die asynchrone Behandlung von Nachrichten auf einem Ziel verwendet wird. Es implementiert die MessageListener
Schnittstelle, die die Methode onMessage
enthält, in der die spezifische Geschäftslogik ausgeführt werden muss.
Ein Nachrichtenlistenerobjekt muss mithilfe der setMessageListener
Methode instanziiert und für einen bestimmten Nachrichtenanwender registriert werden.
Listener myListener = new Listener();
consumer.setMessageListener(myListener);
Nutzen von Themen
JMS-Nachrichtenkonsumenten werden für ein Ziel erstellt, das eine Warteschlange oder ein Thema sein kann.
Verbraucher in Warteschlangen sind einfach clientseitige Objekte, die im Kontext der Sitzung (und Verbindung) zwischen der Clientanwendung und azure Service Bus leben.
Consumer für Themen bestehen jedoch aus zwei Teilen:
- Ein clientseitiges Objekt , das sich im Kontext der Session(oder JMSContext) befindet, und,
- Ein Abonnement , das eine Entität in Azure Service Bus ist.
Die Abonnements sind hier dokumentiert und können eine der folgenden sein:
- Freigegebene dauerhafte Abonnements
- Freigegebene nicht dauerhafte Abonnements
- Nicht freigegebene dauerhafte Abonnements
- Nicht freigegebene nicht dauerhafte Abonnements
JMS-Warteschlangenbrowser
Die JMS-API stellt ein QueueBrowser
Objekt bereit, mit dem die Anwendung die Nachrichten in der Warteschlange durchsuchen und die Kopfzeilenwerte für jede Nachricht anzeigen kann.
Ein Warteschlangenbrowser kann mit dem JMSContext wie im folgenden Beispiel erstellt werden:
QueueBrowser browser = context.createBrowser(queue);
Hinweis
Die JMS-API stellt keine API zum Durchsuchen eines Themas bereit.
Dies liegt daran, dass das Thema selbst die Nachrichten nicht speichert. Sobald die Nachricht an das Thema gesendet wird, wird sie an die entsprechenden Abonnements weitergeleitet.
JMS-Nachrichtenselektoren
Nachrichtenselektoren können verwendet werden, indem Anwendungen empfangen werden, um die empfangenen Nachrichten zu filtern. Mit Nachrichtenselektoren entlädt die empfangende Anwendung die Arbeit des Filterns von Nachrichten an den JMS-Anbieter (in diesem Fall Azure Service Bus), anstatt diese Verantwortung selbst zu übernehmen.
Selektoren können beim Erstellen der folgenden Consumer verwendet werden:
- Geteiltes dauerhaftes Abonnement
- Ungeteiltes dauerhaftes Abonnement
- Geteiltes temporäres Abonnement
- Nicht geteiltes, nicht dauerhaftes Abonnement
- Consumer in der Warteschlange
- Warteschlangenbrowser
Hinweis
Service Bus-Selektoren unterstützen keine SQL-Schlüsselwörter "LIKE" und "BETWEEN".
AMQP-Disposition und Service Bus-Vorgangszuordnung
Hier erfahren Sie, wie eine AMQP-Disposition in einen ServiceBus-Vorgang übersetzt wird:
ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()
Zusammenfassung
In diesem Entwicklerhandbuch wurde gezeigt, wie Java-Clientanwendungen mit Java Message Service (JMS) eine Verbindung mit Azure Service Bus herstellen können.
Nächste Schritte
Weitere Informationen zu Azure Service Bus und Details zu JMS-Entitäten (Java Message Service) finden Sie in den folgenden Artikeln:
- Servicebus – Warteschlangen, Themen und Abonnements
- Service Bus – Java Message Service-Entitäten
- AMQP 1.0-Unterstützung in Azure Service Bus
- Service Bus AMQP 1.0 Developer's Guide
- Erste Schritte mit Service Bus-Warteschlangen
- Java Message Service-API(externes Oracle-Dokument)
- Erfahren Sie, wie Sie von ActiveMQ zu Service Bus migrieren