Skip to content

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, sonst explicit oder 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.
damage-calculation-facade Anfrage
{
    ...,
    "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 oder null.
damage-calculation-facade Antwort (result_data_provider_type explicit oder null)
{
    "result": {
        ...
    },
    "service_version": "1.2.3",
    "Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}
damage-calculation-facade Antwort (result_data_provider_type minio)
{
    "result": {
        "type": "minio",
        "bucket": "bucket_name",
        "path": "directory1/file2.json"
    },
    "service_version": "1.2.3",
    "Guid": "067e475a-3e14-414a-851e-8cbde9a62da1" | null
}