Datenbank für eine BPaaS-Plattform
Die Business Processes, die auf der Plattform angelegt und genutzt werden, müssen in einer Datenstruktur abgelegt werden. So sind die Prozesse dann gespeichert und auch jeder Zeit verfügbar für die Nutzer.
Wir haben uns für die Datenbank MongoDB entschieden, weil diese im Docker unkompliziert mit portainer eingerichtet werden kann und sie JSON Files speichert, was unserem Datenformat der BP Spezifikation entspricht. Um die Einrichtung hat sich Vince gekümmert und auch um die Kommunikationsschnittstelle mit RabbitMQ.
Damit die anderen Komponenten die BP Daten bekommen, müssen sie die Daten auf der Datenbank abfragen können.
Ich habe die Anforderungen der Abfragen von der API bzw. von Frontend und BPExecuter eingeholt und diese dann in Abfragen umgesetzt.
Als Resultat habe ich dann folgende Abfragen definiert:
Diese habe ich dann in Code niedergeschrieben und Vince hat sie angepasst mit in die Einrichtungsdatei der Datenbank übernommen.
Dadurch können Frontend und BPExecuter Daten über die API abfragen. Die API sendet dann je nach Anforderung die richtige Datenbankabfrage an den RabbitMQ Channel der Datenbank und erhält als Antwort die Daten zurück, die die API dann an die richtige Komponente weitergibt.
Hier einmal ein Beispiel wie die Abfrage in JavaScript aussieht, um einen bestimmten BP aus der Datenbank zu bekommen.
Die Funktion erwartet eine json Datei beim Aufruf. Das Format wurde folgendermaßen von Vince definiert:
Mit sentToQueue wird dann eine Antwort mit Folgendem Format zurückgesendet:
Wir haben uns für die Datenbank MongoDB entschieden, weil diese im Docker unkompliziert mit portainer eingerichtet werden kann und sie JSON Files speichert, was unserem Datenformat der BP Spezifikation entspricht. Um die Einrichtung hat sich Vince gekümmert und auch um die Kommunikationsschnittstelle mit RabbitMQ.
Damit die anderen Komponenten die BP Daten bekommen, müssen sie die Daten auf der Datenbank abfragen können.
Ich habe die Anforderungen der Abfragen von der API bzw. von Frontend und BPExecuter eingeholt und diese dann in Abfragen umgesetzt.
Als Resultat habe ich dann folgende Abfragen definiert:
Datenbankabfragen
|
Beschreibung
|
---|---|
getBP | Gibt einen Business Process zurück |
getAllBPs | Gibt eine Liste an Business Processes zurück |
getBPService | Gibt einen Business Process Service zurück |
getAllBPServices | Gibt eine Liste an Business Process Services zurück |
putBP | Einen Business Process einfügen |
putBPService | Einen Business Process Service einfügen |
Diese habe ich dann in Code niedergeschrieben und Vince hat sie angepasst mit in die Einrichtungsdatei der Datenbank übernommen.
Dadurch können Frontend und BPExecuter Daten über die API abfragen. Die API sendet dann je nach Anforderung die richtige Datenbankabfrage an den RabbitMQ Channel der Datenbank und erhält als Antwort die Daten zurück, die die API dann an die richtige Komponente weitergibt.
Hier einmal ein Beispiel wie die Abfrage in JavaScript aussieht, um einen bestimmten BP aus der Datenbank zu bekommen.
funcs.getBP = async function (json) { if (!checkDataId(json.data)) return let bp = await mongo.collection('bp').findOne({ id: json.data.id }) removeMongoId(bp) sendToQueue(channel, json.queue, { id: json.id, data: bp })
}
Die Funktion erwartet eine json Datei beim Aufruf. Das Format wurde folgendermaßen von Vince definiert:
{ queue: "Name der Return-Queue auf der geantwortet werden soll", func: "Name der Funktion, die ausgeführt werden soll. Z.B. 'getBP'", id: "Wird zur Identifizierung zurückgesendet. Type: any", data: "Object" }Mit Hilfe dieser wird die ID des BP an die Abfrage übergeben und kann aus der Mongo Collection bp den richtigen BP heraussuchen.
Mit sentToQueue wird dann eine Antwort mit Folgendem Format zurückgesendet:
{ id: "Identifikation", data: "type: any" }
Die ID wird zur Identifizierung der Abfrage mit zurückgesendet und data ist in diesem Fall das BP Objekt aus der Collection. Die Antwort wird an die Queue zurückgesendet, die auch im json mitgegeben wurde.
Kommentare
Kommentar veröffentlichen