Beschreibung
Der Service bietet die folgende integrative Funktion zwischen B2B, AS4-Modul und angebundenen Backend-Systemen (z.B. MK-Gateway (kurz: MKG) oder EMS-EDM Prophet) beim Versand von Marktnachrichten über die B2B:
Wird eine Nachricht von einem Backend-System über die B2B in den Markt gesendet, so wird der Status des Versands der Nachricht samt Meta-Informationen per REST an das entsprechende Backend zurückgemeldet. Die Zuordnung zu einem Backend erfolgt über die channelId der B2B-Nachricht. Nur Nachrichten, deren channelId in der Konfiguration einem Backend zugeordnet ist, werden zurückgemeldet.
Zusätzlich wird nur der Status für Nachrichten zurückgemeldet, zu denen eine Referenznummer (z.B. im Fall der Verwendung von MKG die verwendete MRSLOTNR) in der B2B als alternativeId gespeichert wurde. So wird kein Übertragungsstatus für durch die B2B erzeugte CONTRLs oder APERAKs übertragen.
Die B2B entscheidet anhand ihrer Marktpartner-Daten, ob der marktkonforme Versand der Nachricht per Mail, AS2 oder AS4 stattfindet.
Im Falle eines Mail- oder AS2-Versands wird der Service am Ende der Nachrichten-Verarbeitung in der B2B getriggert. Technisch genauer: Per RESTClientService wird der Nachrichten-Trigger Endpunkt des b2b-message-services angesprochen, welcher als AMQP Adapter dient und die Nachricht in eine Queue schreibt. Der Backend-Versandstatus-Rückmeldung-Service sammelt dann die benötigten Informationen zum Nachrichtenversand aus der B2B zusammen, bringt sie in das für das Zielsystem gewünschte Format und meldet sie zurück.
Im Fall eines AS4-Versands wird der Service per Message-Broker Exchange-Konfiguration direkt aus dem AS4-Modul heraus getriggert. Genauer geschieht dies dann, wenn der as4-message-service die versendete AS4-Nachricht und das zugehörige Receipt in der B2B speichern möchte.
An das Backend werden neben dem Status (erfolgreich/nicht erfolgreich) zum Versand der Nachricht im Markt noch (abhängig vom Typ des Zielsystems) weitere Zusatzinformationen zurückgemeldet, wie
- das Protokoll (Mail, AS2, AS4)
- der Zeitpunkt des Versands (im Erfolgsfall)
- die B2B Nachrichten-ID (zur eindeutigen Zuordnung zur Nachricht)
- der verwendete Endpunkt im Markt (AS4- oder AS2-URL bzw. Mailaddresse im Erfolgsfall)
- ein Fehlertext (im Fehlerfall)
- die
alternativeIdder B2B Nachricht
Beispiel für eine Rückmeldung an das MKG:
{
"messageId": "ab7035f1-a729-11ef-83f1-0242ac121234",
"successful": true,
"errorMessage": null,
"protocolType": "AS4",
"sentTime": "2025-11-01T10:25:52.338Z",
"endpoint": "https://9903323000007.as4.makgw.seeburger.cloud:443",
"alternativeId": "myMRSlotNr"
}
Beispiel für eine Rückmeldung an EMS-EDM Prophet:
{
"successful": true,
"errorMessage": null,
"sentTime": "2025-11-01T10:25:52.338Z",
"alternativeId": 12345
}
Installation
Der Service wird als Docker Image und Helm Chart (kostenpflichtig/bei entsprechender Berechtigung) bereitgestellt.
Entsprechende Helm Charts können bei Bedarf angefordert und bereitgestellt werden.
Konfiguration
Der Service wird über die folgenden Umgebungsvariablen aus der application.yml konfiguriert.
Dabei müssen im Wesentlichen die technischen Schnittstellen konfiguriert werden:
- die RabbitMQ Verbindung
- die B2B (abgesichert via OAuth2 mit angelegter Keycloak Client Konfiguration)
- die Backend-Systeme (z.B. MKG, Prophet), jeweils abgesichert via Basic Auth
- die Zuordnung von B2B-Kanälen zu den Backend-Systemen
über application.yml
spring:
# RabbitMQ
cloud:
function:
definition: consumeSentMessageEvent
stream:
bindings:
consumeSentMessageEvent-in-0.destination: ${messaging.sentMessageExchangeName}
consumeSentMessageEvent-in-0.group: ${messaging.sentMessageConsumerGroup}
consumeSentMessageEvent-in-0.consumer.max-attempts: ${messaging.consumerMaxAttempts}
rabbit:
bindings:
consumeSentMessageEvent-in-0.consumer.exchange-type: topic
consumeSentMessageEvent-in-0.consumer.quorum.enabled: true
consumeSentMessageEvent-in-0.consumer.auto-bind-dlq: true
consumeSentMessageEvent-in-0.consumer.dlq-quorum.enabled: true
rabbitmq:
host: rabbit-host
port: 5672
username: rabbitmqUser
password: rabbitmqPassword
# Keycloak client
security:
oauth2:
client:
provider:
keycloak:
issuer-uri: http://keycloak-server:8080/auth/realms/pks
registration:
keycloak:
provider: keycloak
client-id: backend-transmission-status-sender
client-secret: meinClientSecret
authorization-grant-type: client_credentials
resourceserver:
jwt:
issuer-uri: http://keycloak-server:8080/auth/realms/pks
# RabbitMQ messaging default configurations
messaging:
sentMessageExchangeName: b2b.message.reference
sentMessageConsumerGroup: default
consumerMaxAttempts: 1
b2b:
url: http://b2b-server:8080
# Backend-Systeme
backends:
configs:
MKG:
url: http://mkg-server:8080
username: admin
password: 123456
connect-timeout: 10000
PROPHET:
url: http://prophet-server:8081
username: prophet_user
password: prophet_secret
connect-timeout: 10000
# Channel-Mappings
channel-mappings:
mappings:
- channel: OUT-MKG
backend: MKG
- channel: OUT-PROPHET
backend: PROPHET
server:
servlet:
contextPath: /backend-transmission-status-sender
über Umgebungsvariablen
SPRING_RABBITMQ_HOST: "rabbit-host"
SPRING_RABBITMQ_PORT: "5672"
SPRING_RABBITMQ_USERNAME: "rabbitmqUser"
SPRING_RABBITMQ_PASSWORD: "rabbitmqPassword"
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KEYCLOAK_ISSUER_URI: "http://keycloak-server:8080/auth/realms/pks"
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: "http://keycloak-server:8080/auth/realms/pks"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_ID: "backend-transmission-status-sender"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_SECRET: "meinClientSecret"
B2B_URL: "http://b2b-server:8080"
BACKENDS_CONFIGS_PROPHET_URL: "http://dummy/receive"
BACKENDS_CONFIGS_PROPHET_USERNAME: "admin"
BACKENDS_CONFIGS_PROPHET_PASSWORD: "123456"
BACKENDS_CONFIGS_MKG_URL: "http://mkg-server:8080"
BACKENDS_CONFIGS_MKG_USERNAME: "admin"
BACKENDS_CONFIGS_MKG_PASSWORD: "123456"
MESSAGING_SENTMESSAGEEXCHANGENAME: "as4.receipt.outbound"
CHANNELMAPPINGS_MAPPINGS_0_CHANNEL: "OUT_B2B_MSG_SERVICE"
CHANNELMAPPINGS_MAPPINGS_0_BACKEND: "PROPHET"
CHANNELMAPPINGS_MAPPINGS_1_CHANNEL: "OUT_MKG"
CHANNELMAPPINGS_MAPPINGS_1_BACKEND: "MKG"
Release Notes
2026-01-20
| Typ | Ticket | Beschreibung |
|---|---|---|
| Story | BTOB-13631 | Initiale Implementierung des backend-transmission-status-sender. Der Service kann einen Versandstatus an verschiedene Backend-Systeme (z.B. MKG, Prophet) basierend auf konfigurierbaren Channel-Mappings senden. |