TL;DR;

Wenn die Fachlichkeit es zulässt, können in Camunda ganze Teile eines Prozesses parallelisiert werden. Dafür muss der Pfad durch den Prozess einfach nur mit einem Parallel Gateway in zwei oder mehr Stränge aufgeteilt werden. Führen wir die Stränge nach getaner Arbeit wieder zusammen, wartet die Engine bis alle parallelen Pfade abgeschlossen sind, bevor  die Ausführung weitergeht.

 

Irgendwann kommt man bei komplexen Prozessen an einen Punkt, an dem die sequenzielle Abarbeitung der einzelnen Prozessschritte keinen Sinn mehr macht. Spätestens wenn man es mit langlaufenden User Tasks zu tun hat, ist es irgendwann sinnvoll diese zu parallelisieren.

Die Voraussetzung dafür ist natürlich, dass die Tasks fachlich unabhängig voneinander sind.

Um Prozessschritte mit Camunda zu parallelisieren, werden wir heute das erste Mal mit einem Gateway arbeiten. Gateways dienen in BPMN dazu die Abarbeitung der einzelnen Prozessschritte zu steuern. Mit ihrer Hilfe lassen sich Entscheidungen sowie Verzweigungen in Prozessen modellieren.

Um einfach nur zwei Stränge in unserem Prozess parallel auszuführen, können wir das “Parallel Gateway” verwenden. Das ist wahrscheinlich auch die einfachste Art von Gateway, da es keiner weiteren Konfiguration bedarf.

Um in unser BPMN ein Parallel Gateway einzufügen, wählen wir in der Toolbox das entsprechende Symbol (Raute) und fügen es in unseren Prozess ein.

In unserem Beispiel verbinden wir das Start Event direkt mit dem Gateway, aber natürlich kann man es auch an einer beliebigen anderen Stelle im Prozess platzieren.

blank

Sobald wir das Gateway eingesetzt haben, sehen wir dass dieses ein X enthält. Es handelt sich dabei um eine andere Art von Gateway, nämlich ein Exclusive Gateway. Um aus diesem jetzt ein Parallel Gateway zu machen, klicken wir auf den kleinen Schraubenschlüssel und wählen “Parallel Gateway” aus. Unsere Gateway sollte jetzt ein + enthalten.

blank

Von unserem Gateway aus, könne wir jetzt beliebig viele neue Stränge anlegen. In unserem Beispiel begnügen wir uns erstmal mit zwei Stränge. Beide enthalten jeweils einen Servicetask und ein Timer Event. Der Servicetask schreibt einfach nur eine Meldung in die Konsole. Das Timer Event dient nur um zu demonstrieren das wirklich beide Stränge gleichzeitig ausgeführt werden.

Um aus beiden Strängen wieder einen zu machen, benutzen wir wieder ein Parallel Gateway. Dieses mal allerdings mit zwei Stränge die hinein gehen und einem der hinaus führt.

blank

Wenn wir die Anwendung jetzt hochfahren und über die Tasklist eine neue Instanz unseres Prozesses starten, sehen wir in der Konsole direkt die Ausgaben der beiden Servicetasks:

Executing Task1

Executing Task2

Öffnen wir jetzt unseren Prozess im Cockpit, sehen wir das die Prozessinstanz noch läuft und gleichzeitig an zwei Positionen im Prozess wartet.

blank

Nach einer Minute sind die beiden Timer abgelaufen und die Stränge werden vom zweiten Gateway wieder zusammengeführt.

Natürlich war das jetzt ein sehr simples Beispiel, aber es zeigt wie das “Parallel Gateway” grundsätzlich verwendet werden kann. Den Code für das Beispiel findet ihr wie immer in Github: https://github.com/pragtics/camunda-demos/tree/master/parallel-gateway