damage-calculation-facade
Der damage-calculation-facade Service integriert den damage-calculation Service mit einem RabbitMQ Message Broker.
Dazu abonniert der damage-calculation-facade Service die für Anfragen konfigurierte RabbitMQ-Queue und delegiert alle eintreffenden Berechnungsanfragen an den damage-calculation Service. Die berechneten Ergebnisse werden wieder auf konfigurierte RabbitMQ-Routing Keys veröffentlicht.
Ein Client muss also nur die Berechnungsanfragen mit dem Anfrage-Routing Key (z.B. Durability.Extremes) taggen und an den Exchange senden. Das Ergebnis kann nach erfolgreicher Bearbeitung über den Ergebnis-Routing Key (z.B. Durability.Extremes.Results) aus demselben Exchange entnommen werden.
Berechnungsanfragen, deren Bearbeitung die konfigurierte Anzahl zulässiger Fehlversuche überschritten haben, werden aus der Anfrage-Queue entnommen und an den Exchange <konfigurierter Exchange>.Canceled gesendet.
Laufzeitumgebung
Der damage-calculation-facade Service muss Zugriff auf zwei Komponenten haben:
- damage-calculation Service zur Delegation der Berechnungsanfragen
- RabbitMQ Message Broker zum Empfangen der Berechnungsanfragen und Ablegen der Berechnungsergebnisse sowie Ablegen der Log-Nachrichten
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
class Client
class RabbitMQ {
<<Message Broker>>
}
class damage-calculation-facade {
<<Service>>
}
class damage-calculation {
<<Service>>
}
Client --> RabbitMQ : publish calculation request
damage-calculation-facade --> RabbitMQ : subscribe calculation requests
RabbitMQ ..> damage-calculation-facade : publish calculation request
damage-calculation-facade --> damage-calculation : delegate calculation
damage-calculation ..> damage-calculation-facade : calculation result
Konfiguration
| Umgebungsvariable | Beschreibung | Typ | Werte |
|---|---|---|---|
| DAMAGE_CALCULATION_SERVICE_URL* | Die URL, unter welcher der damage-calculation Berechnungsservice für die Delegation der Berechnungsanfragen erreichbar ist. | string | |
| RABBITMQ_HOST* | Der Host, unter dem der RabbitMQ Message Broker erreichbar ist. | string | |
| RABBITMQ_PORT | Der Port, unter dem der RabbitMQ Message Broker erreichbar ist. | int | 64-65535 (default: 5672) |
| RABBITMQ_USER* | Der RabbitMQ-Benutzer, den der damage-calculation-facade Service zur Athentifizierung verwendet. | string | |
| RABBITMQ_PASSWORD* | Das Passwort des konfigurierten RabbitMQ-Benutzers. | string | |
| RABBITMQ_VIRTUALHOST* | Der verwendete Virtualhost des RabbitMQ-Servers. | string | |
| RABBITMQ_EXCHANGE_NAME | Der RabbitMQ-Exchange, auf dem die Berechnungsanfragen und -ergebnisse abgelegt werden. | string | default: Measurement.Processing |
| MINIO_HOST* | Name bzw. Adresse des Hosts, unter dem der MinIO-Server erreichbar ist. | string | |
| MINIO_PORT* | TCP-Port, unter dem der MinIO-Server erreichbar ist. | int | 64-65535 |
| MINIO_BUCKET* | Name des MinIO-Buckets, der zum Laden der Messdaten verwendet werden soll. | string | |
| MINIO_USER* | Nutzername, den der Service zur Authentifizierung mit MinIO verwenden soll. | string | mind. 8 Zeichen |
| MINIO_PASSWORD* | Passwort des konfigurierten MinIO-Nutzers. | string | mind. 8 Zeichen |
| MINIO_TLS* | Gibt an, ob TLS bzw. HTTPS für eine verschlüsselte Kommunikation verwendet werden soll. | boolean | |
| MINIO_SSL_CERT_FILE | Pfad zu einer Datei, die die verwendete Kette an SSL-Zertifikaten enthält (mit der u.a. das Server-Zertifikat signiert wurde). Ist keine solche Datei angegeben, wird das Client-Zertifikat bei Anfragen nicht überprüft. | string | |
| EXTREMES_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die Extremwerte einzelner Kanäle getaggt werden. | string | default: Durability.Extremes |
| DAMAGE_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die Schädigung einzelner Kanäle getaggt werden. | string | default: Durability.Damage |
| FREQUENCY_DISTRIBUTIONS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die Kollektive einzelner Kanäle getaggt werden. | string | default: Durability.Frequency-Distributions |
| PSD_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die PSD einzelner Kanäle getaggt werden. | string | default: Durability.PSD |
| MULTI_CHANNEL_EXTREMES_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die absoluten Extremwerte mehrerer Kanäle getaggt werden. | string | Durability.Multi-Channel.Extremes |
| MULTI_CHANNEL_DAMAGE_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die Gesamtschädigung mehrerer Kanäle getaggt werden. | string | default: Durability.Multi-Channel.Damage |
| MULTI_CHANNEL_FREQUENCY_DISTRIBUTIONS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsanfragen für die Gesamtkollektive mehrerer Kanäle getaggt werden. | string | default: Durability.Multi-Channel.Frequency-Distributions |
| EXTREMES_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die Extremwerte einzelner Kanäle getaggt werden. | string | default: Durability.Extremes.Results |
| DAMAGE_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die Schädigung einzelner Kanäle getaggt werden. | string | default: Durability.Damage.Results |
| FREQUENCY_DISTRIBUTIONS_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die Kollektive einzelner Kanäle getaggt werden. | string | default: Durability.Frequency-Distributions.Results |
| PSD_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die PSD einzelner Kanäle getaggt werden. | string | default: Durability.PSD.Results |
| MULTI_CHANNEL_EXTREMES_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die absoluten Extremwerte mehrerer Kanäle getaggt werden. | string | default: Durability.Multi-Channel.Extremes.Results |
| MULTI_CHANNEL_DAMAGE_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die Gesamtschädigung mehrerer Kanäle getaggt werden. | string | Durability.Multi-Channel.Damage.Results |
| MULTI_CHANNEL_FREQUENCY_DISTRIBUTIONS_RESULTS_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem die Berechnungsergebnisse für die Gesamtkollektive mehrerer Kanäle getaggt werden. | string | default: Durability.Multi-Channel.Frequency-Distributions.Results |
| RABBITMQ_MAX_MESSAGE_RETRIES | Die Anzahl der Versuche, eine fehlgeschlagene Berechnung erneut durchzuführen, bevor die Berechnung endgültig abgebrochen wird. | int | mind. 0 (default: 3) |
| RABBITMQ_REQUESTS_QUEUE | Die RabbitMQ-Queue, in der alle Berechnungsanfragen gesammelt werden. Hierfür muss explizit eine Queue verwendet werden, da RabbitMQ zwar das Veröffentlichen von Nachrichten auf über einen Exchange + Routing Key erlaubt, das Abonnieren von Nachrichten jedoch nur über die Angabe einer Queue möglich ist. Der damage-calculation-facade Service konfiguriert den RabbitMQ Broker beim Start automatisch so, dass alle für Berechnungsanfragen konfigurierten Routing Keys auf die mit RABBITMQ_REQUESTS_QUEUE angegebene Queue weitergeleitet werden. | string | default: man-damage-calculation-request |
| RABBITMQ_LOGGING_EXCHANGE_NAME | Der RabbitMQ-Exchange, auf dem Log-Nachrichten abgelegt werden. | string | default: Measurement.Processing.Logs |
| RABBITMQ_LOGGING_ROUTING_KEY | Der RabbitMQ-Routing Key, mit dem Log-Nachrichten getaggt werden. | string | default: Logs |
| RABBITMQ_DEAD_LETTER_EXCHANGE | Der RabbitMQ-Exchange, an den durch einen Timeout oder sonstige Fehler nicht bearbeitete Nachrichten weitergeleitet werden. | string | default: Measurement.Processing.DeadLetter |
API
Berechnungsanfragen müssen als RabbitMQ-Nachrichten an die konfigurierten Routing Keys auf dem konfigurierten Exchange gesendet werden.
Die Anfrage- und Antwortformate aller Berechnungsparameter (Messdaten und Zusatzparameter wie z.B. die Wöhlerlinie) entsprechen denen des damage-calculation Service.
RabbitMQ-Anfragen
Der Payload der RabbitMQ-Anfragen kann um folgende Zusatzfelder erweitert werden:
result_data_provider_type:minio, falls die Berechnungsergebnisse in MinIO gespeichert werden sollen, sonstexplicitoder den Parameter weglassen.result_minio_bucket: Der MinIO-Bucket, in dem Berechnungsergebnisse gespeichert werden sollen. Falls nicht angegeben, wird der konfigurierte Default-Bucket verwendet.Guid: Eine GUID, die zur eindeutigen Zuordnung ins Ergebnis übernommen wird.
{
...,
"result_data_provider_type": "explicit" | "minio" | null,
"result_minio_bucket": "bucket_name" | null,
"Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}
Bei jeder Anfrage sollte der Header x-delivery-count gesetzt werden, der das Verwerfen einer Anfrage nach der konfigurierten Anzahl von Berechnungsfehlversuchen gewährleistet. Falls dieser nicht gesetzt wurde, wird er vor dem erstmaligen Bearbeiten der Anfrage mit 0 initialisiert.
RabbitMQ-Antworten
Der Payload der RabbitMQ-Antworten enthält im Feld result das Berechnungsergebnis und wird um die folgenden Zusatzfelder ergänzt:
service_version: Version des verarbeitenden damage-calculation-facade-Containers.Guid: Aus der Anfrage übernommene Guid odernull.
{
"result": {
...
},
"service_version": "1.2.3",
"Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}
{
"result": {
"type": "minio",
"bucket": "bucket_name",
"path": "directory1/file2.json"
},
"service_version": "1.2.3",
"Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}