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.
B3P_SKIP_FORMAT_RECOGNITION nein nicht gesetzt true Wert wird unverändert in den Message-Kontext unter dem gleichnamigen Schlüssel B3P_SKIP_FORMAT_RECOGNITION übernommen. Bei true wird die Format Recognition für Nachrichten dieses Service übersprungen.
B3P_SKIP_CHANNEL_DISTRIBUTION nein nicht gesetzt true Wert wird unverändert in den Message-Kontext unter dem gleichnamigen Schlüssel B3P_SKIP_CHANNEL_DISTRIBUTION übernommen. Bei true wird die Channel Distribution für Nachrichten dieses Service übersprungen.
beliebiger anderer Schlüssel nein nicht gesetzt – Alle weiteren Service-Properties werden unverändert unter ihrem Property-Key in den Message-Kontext übernommen.

Diese Properties gelten ausschließlich für Nachrichten, die über die B2B Inbox für den jeweiligen Service verarbeitet werden, und werden einmalig je Nachricht aus den persistierten Service-Properties gelesen (analog zu BASE_MESSAGE_JSON_PATH). Da die Properties je serviceid gepflegt werden, können mehrere B2B-Inbox-Services (unterschiedliche serviceid, gleiche classname) parallel mit jeweils eigener Konfiguration betrieben werden.

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