BPMN in Action: Kommunikation von Prozessen über eine Message Queue

Im letzten Beitrag ging es darum, dass ein auf einer Process Engine ausgeführter Prozess mit einem zweiten Prozess kommuniziert, der auf einer anderen Process Engine installiert ist. Dabei wurde die REST-Schnittstelle der zweiten Process Engine genutzt. Da die REST-Schnittstellen von Process Engines nicht standardisiert sind, müssen die Aufrufe speziell an die zweite Engine angepasst werden.

Flexibler ist der im folgenden Beispiel gezeigte Ansatz, bei der eine Message Queue (Nachrichtenwarteschlange) genutzt wird. Dabei stellen die beteiligten Prozesse gesendete Nachrichten in eine von einem Message Broker verwaltete Warteschlange hinein und entnehmen für sie bestimmten Nachrichten daraus. Mit diesem Verfahren ist es auch einfacher, eine der beteiligten Process Engines auszutauschen. Ebenso kann ein Prozess mit einem komplett anderen System kommunizieren, z. B. einem ERP-System. Dies wird im Beispiel mit Hilfe einer kleinen, selbst geschriebenen Java-Klasse gezeigt, die die Rolle des zweiten Prozesses übernimmt.

Download

Die folgende zip-Datei enthält die Bonita-Projektdatei, den RabbitMQ-Connector und den Java-Client.

Voraussetzungen:

Anleitung

RabbitMQ:

  • Wer Docker installiert hat, kann die Installation in der Kommandozeile oder Windows PowerShell mit dem folgenden Befehl starten:
docker pull rabbitmq
  • Anschließend kann der RabbitMQ-Server mit diesem Befehl gestartet werden:
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
  • Für die Installation und den Start des Servers ohne Docker den Anleitungen unter https://www.rabbitmq.com/download.html folgen.
  • Wenn Installation und Start erfolgreich waren, kann man die Management-Konsole von RabbitMQ unter der Adresse http://localhost:15672/ im Browser öffnen (Username „guest“, Passwort „guest).

Bonita:

  • bos-Datei in Bonita als neues Projekt importieren.
  • Unter „Organization“ die Organisation „BPMCO.organization“ deployen (Default-User: admin).
  • Business Data Model deployen.
  • Unter „Process diagrams“ das Diagramm („Collaboration – Request and Order MQ“) deployen.
  • Das Diagramm „Collaboration – Process Request and Order MQ“ kann ebenfalls deployed werden. In diesem Fall werden alle Prozesse in derselben Process Engine ausgeführt. Die Kommunikation erfolgt aber über die Message Queue. Dieses Szenario ist eigentlich nicht besonders sinnvoll, da ja direkt Nachrichtenflüsse in der Process Engine genutzt werden könnten. Es dient lediglich zum Ausprobieren und Testen der MQ-basierten Kommunikation.
  • Um tatsächlich ein verteiltes Szenario zu realisieren, darf das Diagramm „Collaboration – Process Request and Order MQ“ nicht auf dem lokalen Rechner deployed werden.
  • Im verteilten Szenario importiert man die bos-Datei in eine andere Bonita-Installation auf einem anderen Rechner und deployed dort ebenfalls die Organisation „BPMCO.organization“ und das Business Data Model.
  • Auf dem entfernten Rechner muss man im Diagramm „Collaboration – Process Request and Order MQ“ für die unteren beiden Prozesse in der Konfiguration (unter Configuration) bei „Parameters“ der Eintrag für „rabbitMQhost“ von „localhost“ zur Adresse des lokalen Rechners ändern.
  • Nun kann man auf dem entfernten Rechner das Diagramm „Collaboration – Process Request and Order MQ“ deployen.
  • Auf dem lokalen Rechner gelangt man mit „Applications“ gelangt in das Bonita-Portal . Dort „Bonita User Application“ auswählen.
  • Jeder Benutzer kann den Prozess starten. Der Benutzer „admin“ kann alle Rollen im Prozess wahrnehmen, so dass man nicht zwischen verschiedenen Benutzern wechseln muss.
  • Das Standardpasswort für alle Benutzer ist „bpm“.

Java-Client

  • Anstelle des Prozesses im entfernten Rechner kann man auch den Java-Client verwenden.
  • Auch hierfür sollte nicht parallel der Prozess „Retrieve Messages from MQ“ laufen, da sich der Prozess und der Java-Client sonst die Nachrichten aus der Warteschlange gegenseitig wegschnappen.
  • Die Datei proposalProcessClient.jar auf dem lokalen Rechner in ein Verzeichnis kopieren und in der Eingabeaufforderung oder PowerShell mit folgendem Befehl starten (Voraussetzung ist eine Installation von Java ab Version 16):
java -jar proposalProcessClient.jar
  • Wer den Java-Client modifizieren will, findet den Quellcode und die benötigten Libraries in der Datei proposalProcessClient-java-src.zip.

RabbitMQ-Connector

  • Die RabbitMQ-Konnektor-Datei „connector-rabbitmq-0.0.1-SNAPSHOT.jar“ wird nur benötigt, wenn man den Konnektor in ein anderes Projekt importieren möchte. In dem Projekt der bos-Datei ist der Konnektor bereits enthalten.