MQ JMS-Anwendungsentwicklung auf Spring Boot



Wenn Java-Entwickler die JMS-Oberfläche verwenden, arbeiten sie häufig lieber mit dem Spring Framework. Spring kann die Codierung neuer Anwendungen vereinfachen, indem es Vorlagen für allgemeine Muster bereitstellt, und wird seit vielen Jahren erfolgreich mit den MQ-JMS-Klassen verwendet. Die Spring JmsTemplate-Klasse ist eine wichtige Schnittstelle, hängt jedoch von den Konfigurationen und Abhängigkeiten im Code ab.

Das Spring Framework enthält verschiedene Module für verschiedene Anforderungen. Eine solche Komponente ist Spring Boot. Spring Boot-Starter rufen bequem alle Abhängigkeiten und Bibliotheken zur automatischen Konfiguration auf, die für die Verwendung einer bestimmten Technologie erforderlich sind. Dies macht es sehr einfach, mit einer neuen Anwendung und Technologie zu beginnen, und zwar schneller als direkt mit Klassen wie JmsTemplate zu arbeiten. Wie können wir diesen einfachen Zugriff für MQ-Anwendungen nutzen?

Übersetzt von @middle_java

Mark und Taylor
Veröffentlicht am 04/03/2018 / Aktualisiert am 12/06/2018
11 Kommentare

In diesem Artikel wurde beschrieben, wie Sie MQ-Klassen direkt vom Maven Central Repository Java herunterladen. Und jetzt werden wir dies verwenden, um den Spring Boot Starter für MQ zu erstellen. Sie können den vollständigen Quellcode des Moduls von GitHub herunterladen.

Erste Schritte mit MQ Spring Boot


Zunächst benötigen wir einen aktiven Warteschlangenmanager. Anschließend erstellen wir eine Anwendung, die auf diesen Warteschlangenmanager zugreift.

Starten eines Warteschlangenmanagers in einem Container


Für einen schnellen Einstieg können Sie den IBM MQ- Container für Entwickler verwenden , in dem Serverprozesse ausgeführt werden. Wenn dieser Container gestartet wird, werden standardmäßig mehrere Objekte erstellt und ihre Definitionen sind dem Modul für die automatische Konfiguration bekannt. Die Standardwerte entsprechen den vom Container-Warteschlangenmanager geforderten Werten.

Dies bedeutet, dass Sie den Warteschlangenmanager über die Docker-Umgebung starten und ohne zusätzliche Einstellungen eine Verbindung herstellen können. Sie können den Container unter Linux mit dem folgenden Befehl starten:

docker run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 \ --publish 1414:1414 \ --publish 9443:9443 \ --detach \ ibmcom/mq 

Anwendungsbeispiel


Es wird ein Ansatz verwendet, der mit dem JMS-Anwendungsmodell im Spring JMS Getting Started Guide übereinstimmt. Ich bin dem Pfad zum Importieren dieses Projekts in den Eclipse-Arbeitsbereich gefolgt und habe den Gradle- Build- Prozess verwendet , aber der maven- basierte Prozess funktioniert auch. Als Übung habe ich die Maven-Konfiguration über die Befehlszeile anstelle der Eclipse-IDE verwendet.
Der gleiche Code aus dem Beispiel funktioniert mit MQ mit minimalen Änderungen:

  • Ändern Sie den Quellenmessaginganbieter in der Abhängigkeitsliste, um auf das IBM MQ-Paket zu verweisen.
  • Ändern Sie den Warteschlangennamen in Application.java (im Beispiel wird "mailbox" verwendet) in "DEV.QUEUE.1". Dies ist die von der Developer-Konfiguration im Docker-Container vordefinierte Warteschlange. Wenn Sie nicht die Standardkonfigurationsparameter von Developer verwenden, müssen Sie entweder den Warteschlangennamen auf den Namen der vorhandenen Warteschlange festlegen oder die entsprechende neue Warteschlange definieren.

Die geänderte build.gradle- Datei, die die Kompilierung steuert, hat jetzt:

  dependencies { compile("com.ibm.mq:mq-jms-spring-boot-starter:+") compile("com.fasterxml.jackson.core:jackson-databind") } 

Wenn Sie Maven bevorzugen, lautet der entsprechende Abschnitt in pom.xml wie folgt:

 <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>mq-jms-spring-boot-starter</artifactId> <version>0.0.3</version> </dependency> </dependencies> 

Der einzige wirkliche Unterschied besteht darin, dass in der Maven-Konfiguration eine bestimmte Version des MQ Spring Boot-Moduls angegeben ist.

Standardkonfiguration


MQ Boot Starter-Konfigurationsattributnamen beginnen mit dem Präfix ibm.mq. Attribute standardmäßig

  ibm.mq.queueManager=QM1 ibm.mq.channel=DEV.ADMIN.SVRCONN ibm.mq.connName=localhost(1414) ibm.mq.user=admin ibm.mq.password=passw0rd 

Sie entsprechen den Standardwerten des Docker-Containers.

Erweiterte Konfigurationsoptionen


Wenn Sie bereits einen aktiven MQ-Warteschlangenmanager haben, den Sie verwenden möchten, können Sie die Standardkonfiguration problemlos ändern, indem Sie überschriebene Werte angeben. Ein Warteschlangenmanager kann ein lokaler Service oder sogar ein in IBM Cloud gehosteter Service sein. Die Datei application.properties in einem Java-Projekt ist eine Möglichkeit, diese Attribute aus dem Projekt zu entfernen. Die Konfiguration wird ohne Codeänderungen wirksam.

Geben Sie den Namen des Warteschlangenmanagerattributs an:

 ibm.mq.queueManager=QM1 

Für Clientverbindungen zum Warteschlangenmanager müssen Sie ebenfalls festlegen

 ibm.mq.channel ibm.mq.connName 

Wenn weder channel noch connName angegeben sind, wird davon ausgegangen, dass der lokale Warteschlangenmanager verwendet wird. Die Konfigurationskomponente unterstützt auch einige TLS-bezogene Attribute. Sie werden ausführlicher in der README-Datei beschrieben, ihre Standardwerte sind jedoch null. Möglicherweise müssen Sie auch installieren

 ibm.mq.user ibm.mq.password=passw0rd 

um die Standardwerte zu überschreiben. Diese Attribute können leer gelassen werden, um die lokale Benutzer-ID des Betriebssystems ohne Authentifizierung zu verwenden, sofern der Warteschlangenmanager dies zulässt.

Beispielinhalt der Datei application.properties :

  ibm.mq.queueManager=QM1 ibm.mq.channel=SYSTEM.DEF.SVRCONN ibm.mq.connName=server.example.com(1414) ibm.mq.user=user1 ibm.mq.password=passw0rd 

Danach erstellt Spring Boot eine ConnectionFactory, die zur Interaktion mit dem Warteschlangenmanager verwendet werden kann.

Beispielprogramm testen


Sie können das Beispielprogramm mit dem gradle bootRun . Oder verwenden Sie maven, um mvn package auszuführen, und dann java -jar ./target/gs-messaging-jms.jar , um das Programm auszuführen. Sie sollten Folgendes sehen:



Hier können Sie sehen, wie die Anwendung die Nachricht platziert ("Senden einer E-Mail-Nachricht") und sie dann abruft.

Schlussfolgerungen


Wenn Sie Spring Boot Starter mit MQ verwenden, können Sie sehr schnell loslegen. Nachdem Sie Ihre erste Anwendung gestartet haben, können Sie sie erweitern, um andere MQ-Funktionen zu verwenden. Nachdem Sie es versucht haben, können Sie hier oder auf der Seite mit den GitHub-Problemen Feedback geben.

Update - Juni 2018


Anfang dieses Jahres wurde ein umfangreiches Update für das Spring Boot Framework, Boot 2, veröffentlicht. Der MQ Boot Starter wurde für diese neue Version der Plattform aktualisiert. Natürlich sind alle öffentlich veröffentlichten Versionen dieses Codes im Maven Central Repository verfügbar. Um die Kompatibilität mit Spring Boot 1 zu gewährleisten , müssen Sie weiterhin Version 0.0.4 dieses Artefakts verwenden. Version 2.0.0 ist kompatibel mit Boot 2 und wird als Basis für zukünftige Updates verwendet.

Tags jms , mq , mqseries , spring , spring boot

Autor Mark E Taylor

11 Kommentare zum Artikel "MQ JMS-Anwendungen auf Spring Boot entwickeln"


(Nur nützliche Kommentare und Kommentare mit übersetzten Antworten)

3.
Horacio 16. Mai 2019
Mark, großartige Arbeit.
Kann ich mehr als eine Warteschlange bearbeiten?
Ich sehe, dass das Präfix in @ConfigurationProperties fest codiert ist (Präfix = "bm.mq")

o Mark E Taylor 17. Mai 2019
Ich verstehe die Frage wirklich nicht. Ein „Präfix“ bezieht sich auf Konfigurationsattribute, die im Grunde zeigen, wie eine Verbindung zum Warteschlangenmanager hergestellt wird. Dies hat nichts mit den Warteschlangen zu tun, die die Anwendung nach dem Herstellen der Verbindung verwendet. Wenn Sie wirklich nach einer Verbindung zu mehreren Warteschlangenmanagern fragen möchten , lesen Sie unter github.com/ibm-messaging/mq-jms-spring/issues/7 nach, welche Ansätze die Benutzer verwenden.

7.
Peter, 17. Mai 2018
"Hello.Application" fehlt, befinden sich die Dateien auf Github?

o Mark E Taylor, 12. Juni 2018
Zum Extrahieren und Importieren einer Beispielanwendung habe ich die Seite "Erste Schritte mit Spring" verwendet (siehe spring.io/guides/gs/messaging-jms ) und dann geringfügige Änderungen vorgenommen. Aus verschiedenen Gründen wollte ich hier absichtlich keine separate Kopie dieses Codes haben.

Übersetzt von @middle_java .

Source: https://habr.com/ru/post/de479232/


All Articles