AS4 Outbound Market Message Service Dokumentation

Der AS4 Outbound Market Message Service nimmt Edifact- und Marktnachrichten entgegen, erstellt daraus AS4-Nachrichten und leitet diese über den Message-Broker an den Crypto Operations Service weiter. Darüber hinaus verarbeitet er Pathswitch-Anfragen vom AS4 Address Service.

Features

Feature Property Default Beschreibung
Feste AS4-Adresse useFixedAs4Address false Verwendet eine feste AS4-Adresse anstatt des Address-Service
Tenant-Header-Validierung validateTenantHeader false Prüft ob Tenant-MPID im Payload mit AMQP-Header übereinstimmt
BDEWApplicationReference setzen setBdewApplicationReference false Fügt den BDEWApplicationReference-Header für MSCONS hinzu
Aktivierungszeitpunkt BDEWApplicationReference bdewApplicationRefActivationTime 2025-04-04T00:00:00+02:00 Zeitpunkt, ab dem BDEWApplicationReference automatisch aktiv ist
Automatische Beziehungsbestätigung autoConfirmRelation false Bestätigt unbestätigte AS4-Beziehungen automatisch beim Senden

Hardware Anforderungen

Eine Service-Instanz erfordert mindestens 512 MB RAM.

Wir empfehlen 0,4 CPU-Kerne je Instanz.

Logs werden auf die Festplatte geschrieben, entsprechend muss genügend Speicherplatz vorhanden sein.

Abhängigkeiten

Der Service greift auf einen Message-Broker zu, um Nachrichten zu empfangen und zu versenden.

Der Service greift auf die REST-API des AS4 Address Service zu.

Einfache Konfiguration der as4-outbound-market-message-service.properties

Anbindung AS4-Address-Service REST API

Der AS4 Outbound Market Message Service benötigt die Adresse des Marktpartners, der Empfänger der Edifact Nachricht ist. Diese erhält er vom AS4 Address Service. Um diesen Service ansprechen zu können, ist die Adresse addressServerUrl notwendig.

addressServerUrl=http://localhost:8085/aep-as4-address-service/as4-address

Existiert zum Beispiel aus Testgründen kein AS4 Address Service oder sind noch keine Adressen vorhanden, kann eine feste AS4-Adresse verwendet werden:

useFixedAs4Address=true
as4.address.send=http://localhost:8083/aep-as4-inbound-endpoint/as4

Anbindung Message-Broker

Außerdem benötigt der AS4 Outbound Market Service die Angaben zum Message-Broker.

rabbitmq.host=localhost
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest

AMQP Routing Konfiguration

Im Standard-Routing ist keine weitere Konfiguration nötig. Die folgende Tabelle gibt eine Übersicht über alle vom Service genutzten Exchanges und ihre Gegenstellen. Die Default-Queue ergibt sich aus <exchange>.default.

Richtung Property Exchange Default-Queue Gegenstelle Zweck
Consumer outboundRequestConsumerExchangeName as4.outbound.request as4.outbound.request.default B2B Message Service / angeschlossene Systeme Empfang ausgehender Marktnachrichten
Consumer pathswitchConsumerExchangeName as4.outbound.request.pathswitch as4.outbound.request.pathswitch.default AS4 Address Service Empfang einer Pathswitch-Anforderung (neue Internet-Adresse des Tenants)
Producer cryptoEncryptAndSignExchangeName as4.encrypt.sign as4.encrypt.sign.default Crypto Operations Weiterleitung der Edifact-Nachricht zur Verschlüsselung/Signierung

Begrenzung der Sendeversuche pro Nachricht:

consumer.max.attempts=1

Consumer-Gruppen anpassen

Für die Consumer-Exchanges kann die Gruppe geändert werden, falls Routing genutzt wird (ansonsten auf default belassen). Über max-concurrency lässt sich die Anzahl gleichzeitiger Verarbeitungsthreads pro Consumer einstellen (Default: 50).

outboundRequestConsumerGroup=default
outboundRequestConsumerMaxConcurrency=50
pathswitchConsumerGroup=default
pathswitchConsumerMaxConcurrency=50

Producer-Routing nach Header

Für Producer-Exchanges lässt sich das Routing über <exchangeProperty>HeaderName und <exchangeProperty>HeaderValues aktivieren. Nachrichten mit Werten, die nicht in HeaderValues aufgelistet sind, laufen weiterhin über die Default-Route. Die Gegenstelle muss entsprechend eingerichtet werden.

Mögliche HeaderName-Werte:

  • tenant: ILN Nummer des Senders
  • partner: ILN Nummer des Empfängers
  • sector: GAS, ELECTRICITY

Beispiel für cryptoEncryptAndSignExchangeName:

cryptoEncryptAndSignExchangeName=as4.encrypt.sign
cryptoEncryptAndSignHeaderName=tenant
cryptoEncryptAndSignHeaderValues=9907647000008,9903111000003

Verify AMQP Tenant Header

Mit dieser Eigenschaft kann eine Prüfung beim Konsumieren des AMQP-Events aktiviert werden. Es wird überprüft, ob die Tenant-MPID aus dem Payload mit dem Tenant aus dem Header des AMQP-Events übereinstimmen. Ist dies nicht der Fall, wird die Nachricht nicht verarbeitet und ein Fehler gelogged. Diese Funktion kann wie folgt aktiviert werden:

validateTenantHeader=true

Set BDEWApplicationReference

Aktivieren Sie BDEWApplicationReference für MSCONS: Wenn die Funktion deaktiviert ist, wird der Header nicht hinzugefügt, wenn Funktion aktiviert: Es wird der Header für MSCONS hinzugefügt und die Funktion wird ab einem bestimmten Datum und einer bestimmten Uhrzeit aktiviert, jedoch nicht vorher. Beispiel: 2025-04-04T00:00:00+02:00 – hierfür ist kein Neustart des Dienstes erforderlich.

setBdewApplicationReference=true

Automatisches Aktivieren von AS4-Beziehungen

Es besteht die Möglichkeit, eine zuvor unbestätigte Beziehung während der Nachrichtenverarbeitung automatisch zu bestätigen, wenn die AS4-Adressen auf Basis von Zertifikaten automatisch gepflegt werden und das Verschlüsselungszertifikat vorhanden ist. Diese Funktion kann aktiviert werden, indem der folgende Parameter auf „true“ gesetzt wird. Standardmäßig ist er auf „false“ gesetzt.

autoConfirmRelation=true

Es kann einige Zeit dauern, bis Partnerzertifikate und -beziehungen erstellt werden. Um Fehler zu vermeiden, kann die Warteschlange/der Prozess automatisch erneut versuchen. Um sicherzustellen, dass diese Funktion korrekt arbeitet, müssen sowohl die Anzahl der Wiederholungsversuche als auch das Intervall zwischen den Versuchen konfiguriert werden. Unten sind die Eigenschaften aufgeführt, die konfiguriert werden müssen, mit Beispielwerten zur Orientierung.

spring.cloud.stream.bindings.consumeOutboundRequestEvent-in-0.consumer.max-attempts=3
spring.cloud.stream.bindings.consumeOutboundRequestEvent-in-0.consumer.back-off-max-interval=5000
spring.cloud.stream.bindings.consumeOutboundRequestEvent-in-0.consumer.back-off-initial-interval=5000

REST API Dokumenation

Die API bietet Server-Health Informationen an.

Die Beschreibung der REST API lässt sich, im Fall einer Docker Installation, unter http://host.docker.internal:8081/aep-as4-outbound-market-message-service/swagger-ui/index.html# oder unter http://localhost:8080/aep-as4-outbound-market-message-service/swagger-ui/index.html#/ finden.

Der Port kann über folgende Property konfiguriert werden: server.port=8080.

REST API zur Entgegennahme von Edifact Nachrichten (deprecated)

Diese REST API soll nicht mehr genutzt werden, stattdessen sind Nachrichten per AMQP zu übermitteln.

Anhang: Gesamtkonfiguration

Folgende Konfiguration reicht in einem Standard-System aus: application.properties:

#=== REST Call To Other Services ===#
addressServerUrl=http://as4-address-service:8080/aep-as4-address-service/as4-address

#=== RabbitMQ Connection Configuration ===#
rabbitmq.host=rabbitmq3
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=${RABBITMQ_PASSWORD}

Allgemeine Hinweise zur Konfiguration finden Sie hier.

View Me   Edit Me