Direkte Übergabe von AMQP-Nachrichten an die B2B über den B2B-Message-Service

Übersicht

Mit der B2B Inbox können Nachrichten direkt per AMQP an die B2B übergeben werden, ohne dass dabei eine spezifische API eingehalten werden muss. Die Fachnachricht wird dabei unmittelbar als Payload der AMQP-Nachricht übertragen, zum Beispiel ein Json mir Metadaten und einer Fahrplan-XML.

Die Anbindung erfolgt über den B2B-Message-Service, der die eingehenden Nachrichten entgegennimmt und an einen im B2B-Customizing gepflegten Base-Service übergibt.

Konfiguration

Um die B2B Inbox zu nutzen, muss der entsprechende Consumer in der B2B-Message-Service Konfiguration (via application.yml) aktiviert werden. Zusätzlich ist ein Base-Service anzugeben. Dieser Base-Service muss im B2B-Customizing vorhanden sein.

b2b-inbox:
  enabled: true
  base-service: B2B-AMQP-Inbox-Service
Eigenschaft Pflicht Beschreibung
enabled ja Aktiviert (true) oder deaktiviert (false) die B2B Inbox.
base-service ja Fallback-Service, wenn kein service-Header gesetzt ist. Der Service muss in der B2B als Service vorhanden sein.

B2B Service Konfiguration

Konfiguration des Standard-Base-Services B2B-AMQP-Inbox-Service im B2B-Customizing:

B2BInboxServiceConfig

Service-Properties

Property Pflicht Default Beispielkonfiguration Beschreibung
BASE_MESSAGE_JSON_PATH nein nicht gesetzt $.message JSONPath-Ausdruck zur Ermittlung von B3P_BASE_MESSAGE aus der Inbox-Payload. Bei nicht gesetzter oder leerer Property wird die komplette Payload als B3P_BASE_MESSAGE gespeichert.

Fallback auf komplette Payload: Bei ungültigem JSONPath, JSONPath-Verarbeitungsfehler oder Base64-Decoding-Fehler wird B3P_BASE_MESSAGE mit der kompletten Payload befüllt, INPUT_MESSAGE nicht geschrieben und B2B_MESSAGE_SERVICE_ERROR_DETAILS persistiert.

Konsumierte AMQP-Header und Auswirkung

Header Auswirkung
payloadName Wird im Event übernommen und protokolliert.
service Steuert den zu ladenden B2B-Service. Wenn nicht gesetzt, wird b2b-inbox.base-service verwendet.
channel Wird aus der Nachricht gelesen und protokolliert; der persistierte B2B-Channel wird jedoch aus dem ermittelten B2B-Service bestimmt.
prio Wird als Queue-Prioritaet verwendet, wenn als Name oder Integer parsebar; sonst greift die konfigurierte Standard-Priorisierung.
alternativeId Wird in Message-Kontext und Message (sofern vorhanden) übernommen.
encoding Definiert das Charset für die Payload-Konvertierung (Default: UTF_8).

Verarbeitungsablauf

  1. Der B2B-Message-Service konsumiert eine Nachricht aus der Inbox-Queue (z. B. b2b.inbox.default).
  2. Die Payload wird zu String konvertiert (inkl. Base64-Decoding, falls erforderlich) und mit encoding gelesen.
  3. Das InboxMessageEvent wird aus Payload und Headern aufgebaut und auf Info-Level protokolliert.
  4. Ohne Payload wird die Nachricht mit Fehlerlog quittiert (ack), ohne weitere Verarbeitung.
  5. Der Ziel-Service wird über Header service oder über b2b-inbox.base-service ermittelt.
  6. Aus dem Service werden B2B-Channel und Richtung bestimmt.
  7. Message, Action und Message-Attribute werden persistiert.
  8. Danach wird ein Queue-Eintrag (state = NEW) mit Kontextdaten für die weitere B2B-Verarbeitung erzeugt.

Persistierte Daten

Message

  • messageId: generierte UUID
  • direction: aus Service-Richtung (0 oder 1)
  • state: QUE
  • channelId: aus Service
  • alternativeId: aus Header (falls gesetzt)

Action

  • type: Service
  • name: Service-Name
  • classname: com.arvato.application.message.InboxMessageProcessor
  • state: SUC

Message-Attribute

  • B3P_BASE_MESSAGE
  • B3P_BASE_CHANNEL_ID
  • B3P_BASE_SERVICE_ID
  • optional INPUT_MESSAGE
  • optional B2B_MESSAGE_SERVICE_ERROR_DETAILS

Queue

  • serviceId: aus ermitteltem Service
  • state: NEW
  • direction: aus Service-Richtung
  • prio: aus Header prio oder aus Standard-Konfiguration
  • entry: serialisierter Message-Kontext

Fehlerfälle und Fallbacks

  • Unsupported Encoding: Fehler wird geloggt, Verarbeitung erfolgt mit UTF_8 weiter.
  • Payload fehlt: Fehler wird geloggt, AMQP-Nachricht wird quittiert und nicht weiter verarbeitet.
  • Service nicht gefunden: ServiceNotFoundException; die Nachricht wird nicht quittiert.
  • JSONPath-/Decoding-Fehler: Fallback auf komplette Payload als B3P_BASE_MESSAGE und Fehlerdetails in B2B_MESSAGE_SERVICE_ERROR_DETAILS.
  • Ungueltige prio: Fallback auf konfigurierte Queue-Standard-Prioritaet.
View Me   Edit Me