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