
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_javaMark und TaylorVeröffentlicht am 04/03/2018 / Aktualisiert am 12/06/2018
11 KommentareIn
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 bootAutor
Mark E Taylor11 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 .