Der AS4 Message Service persistiert die Nachrichten und Bestätigungen, um eine spätere Nachverfolgbarkeit zu ermöglichen. Dieser Service erhält die AS4-Nachrichten und Bestätigungen über den Message-Broker, bietet aber über REST eine Abfragemöglichkeit an.
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 eine SQL Datenbank zu, um Nachrichten zu speichern. Der Speicherverbrauch hängt vom Nachrichtenaufkommen sowie von der Archivierungs-/Löschstrategie ab.
Einfache Konfiguration der as4-message-service.properties
SQL Datenbank Anbindung
Der Einsatz des Microservice erfordert Zugriff auf eine SQL-Datenbank. Im Vorfeld muss ein Schema angelegt worden sein. Die Tabellen werden automatisch vom Microservice angelegt (via flyway).
Diese speziellen Datenbankparameter können je nach Bedarf verändert werden. Das Passwort wird als Environment Variable mit übergeben. Momentan werden die Datenbanksysteme MSSQL, Oracle und Postgresql unterstützt.
#=== JDBC Settings ==='
datasource.url=jdbc:postgresql://as4-database:5432/as4_messages
datasource.username=postgres
datasource.password=${DB_PASSWORD}
datasource.type=postgres
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Im Fall einer Oracle-DB kann sich an den nachfolgenden Parametern orientiert werden.
datasource.url=jdbc:oracle:thin:@//as4-database-oracle:1521/orclas4
datasource.username=as4_messages
datasource.password=${DB_PASSWORD}
datasource.type=oracle
Message Broker Anbindung
Die Kommunikation zwischen den verschiedene AS4 Services erfolgt über einen Message-Broker.
#=== RabbitMQ Configuration ===#
rabbitmq.host=rabbitmq3
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest
AMQP Routing Konfiguration
Falls Sie das Standard Routing nutzen, muss das Routing nicht weiter konfiguriert werden. Wenn Sie Ihr Routing anpassen möchten, lesen Sie die folgende Dokumentation.
Der AS4 Message Service empfängt über die Queue as4.messages.default die Business Message vom AS4 Receipt Service und AS4 Outbound Sender.
businessMessageExchangeName=as4.messages
Über die Queue as4.receipt.default erhält der AS4 Message Service die Empfangsbestätigungen (Receipt) vom AS4 Receipt Message und dem AS4 Inbound Endpoint.
receiptExchangeName=as4.receipt
Nach der Speicherung der AS4-Nachricht wird diese je nach ServciceId an den AS4 Address Service oder B2b Message Service per AMQP geroutet.
inboundExchangeName=as4.inbound
Inbound Routing Konfiguration der as4-message-service.properties
Im default wird die Nachricht je nach ServiceId an den AS4 Address Service oder B2B Message Service geroutet. Ist ein anderes Routing gewünscht, so kann dies durch Angabe der RoutingKeyExpression erfolgen. Dazu können Werte aus dem Header verwendet werden. Folgende Werte befinden sich im Header:
- tenant: ILN Nummer des Senders
- partner: ILN Nummer des Empfängers.
- sector: GAS, ELECTRICITY
- serviceId: serviceId Wert
In der application.properties müsste die Eigenschaft wie folgt angegeben werden:
inboundExchangeName=as4.inbound
inboundRoutingKeyExpression=headers.serviceId
Es kann auch eine Kombination aus Header-Werten angegeben werden. Zum Beispiel, wenn nach Tenant und ServiceId geroutet werden soll.
Wichtig ist, dass der Exchange, die Queues und die entsprechenden Bindings vor dem Start des AS4 Message Service erstellt werden müssen, da es sonst sein kann, dass Nachrichten verloren gehen. Eine entsprechende Dokumentation zum Anlegen der Queues ist hier dokumentiert.
Wird der Producer für das Routing konfiguriert muss natürlich auch die Gegenstelle dafür eingerichtet werden. Dem Consumer wird über die Gruppe der Wert (Value) aus der HeaderValues Liste zugewiesen nach welchem gefiltert werden soll. Bitte den Default Wert nur ändern, wenn Routing verwendet werden soll.
businessMessageExchangeName=as4.messages
businessMessageGroup=default
receiptExchangeName=as4.receipt
receiptGroup=default
Outbound Routing Konfiguration der as4-message-service.properties
Im default wird die Nachricht je nach ServiceId an B2B Message Service geroutet. Ist ein anderes Routing gewünscht, so kann dies durch Angabe der RoutingKeyExpression erfolgen. Dazu können Werte aus dem Header verwendet werden. Folgende Werte befinden sich im Header:
- tenant: ILN Nummer des Senders
- partner: ILN Nummer des Empfängers.
- sector: GAS, ELECTRICITY
- serviceId: serviceId Wert
In der application.properties müsste die Eigenschaft wie folgt angegeben werden:
outboundExchangeName=as4.receipt.outbound
outboundRoutingKeyExpression=headers.serviceId
Es ist zudem möglich eine Kombination aus verschiedenen Header-Werten anzugeben. Soll das Routing beispielsweise anhand des Tenants und der ServiceId stattfinden, so kann dies wie folgt angegeben werden:
outboundRoutingKeyExpression=headers.serviceId + '.' + headers.tenant
Zeitzone
Es wird empfohlen, die Server-Zeitzone auf die gewünschte Zeitzone einzustellen. Alle Server müssen die gleiche Zeitzone nutzen. Die Server-Zeitzone darf nachträglich nicht mehr geändert werden.
REST API Dokumentation
Die API bietet die Möglichkeit zur Abfrage von verarbeiteten AS4 Nachrichten und zugehörigen Quittungen.
Darüber hinaus bietet die API Server-Health Informationen an.
Ein KontextPath Präfix kann über folgende Property konfiguriert werden: server.servlet.contextPath
.
Der Port lässt sich über folgende Property konfigurieren: server.port=8080
.
Swagger
Die Beschreibung der REST API lässt sich, im Fall einer Docker Installation, unter
http://host.docker.internal:8086/aep-as4-message-service/swagger-ui/index.html#/
oder unter
http://localhost:8080/aep-as4-message-service/swagger-ui/index.html#/
finden.
Anhang: Gesamtkonfiguration
Folgende Konfiguration reicht in einem Standard-System aus: application.properties
:
#=== JDBC Settings ==='
datasource.url=jdbc:postgresql://as4-database:5432/as4_messages?currentSchema=as4_messages
datasource.username=postgres
datasource.password=${DB_PASSWORD}
datasource.type=postgres
#=== RabbitMQ 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