Data Loader

Funktion

Der Microservice konsumiert die Zeiträume aus der Work Package Queue und lädt alle relevanten Nachrichten innerhalb des Zeitraums aus der B2B-Datenbank. Dabei werden alle zur Archivierung konfigurierten Informationen der Nachricht geladen. Danach wird der Status (VS) an der Nachricht auf (“In Archivierung”) aktualisiert. Zu jeder Nachricht wird dann ein Eintrag zur Archivierung in die Persistence Queue geschrieben.

Optionaler zweistufiger Workflow (Message Archive Data Loading)

Ab Version 2026-07-xx kann optional ein zweistufiger Verarbeitungsweg aktiviert werden (message-archive-data-loading.enabled: true). Dieser ist standardmäßig deaktiviert; ohne Konfigurationsänderung verhält sich der Service unverändert wie zuvor.

Bei aktiviertem Workflow wird ein Zeitraum aus der Work Package Queue nicht mehr in einem Schritt verarbeitet, sondern in zwei Stufen aufgeteilt:

  1. Stufe 1: Der Service ermittelt zum Zeitraum nur die betroffenen Nachrichten ohne deren (teils sehr große) Attribute und schreibt jede Nachricht einzeln in eine Zwischen-Queue (Standardname message_archive_data_loading_queue).
  2. Stufe 2: Ein Consumer holt die einzelnen Nachrichten, lädt je Nachricht die Attribute und Zusatzdaten, aktualisiert den Status und schreibt den Archivierungseintrag in die Persistence Queue.

Dadurch befindet sich immer nur eine einzelne Nachricht inklusive Attribute gleichzeitig im Arbeitsspeicher (zusätzlich begrenzt über message-archive-data-loading.prefetch). Der Speicherverbrauch bleibt so auch bei Zeiträumen mit sehr vielen Nachrichten konstant. Schlägt die Verarbeitung einer Einzelnachricht fehl, wird diese in der Queue belassen (Requeue) und später erneut versucht, statt den Service zu beenden.

Beide Stufen werden verlustfrei gedrosselt (Backpressure): Stufe 1 pausiert, solange die Zwischen-Queue mehr als message-archive-data-loading.queue-max-size Nachrichten (Standard 100.000) enthält; Stufe 2 pausiert, solange die Persistence Queue mehr als production-queue-max-size Nachrichten (Standard 1.000) enthält.

Empfehlung: Den Message-Archive-Data-Loading-Workflow für Umgebungen mit großen Zeiträumen (z. B. über 10.000 Nachrichten pro Zeitraum) aktivieren, um RAM-Engpässe zu vermeiden.

Konfiguration

Die Konfiguration des Microservices geschieht über die im “docker-compose”-Datei angegebene “application.yml”. Die Variablen darin werden üblicherweise im globalen docker environment File konfiguriert, siehe Installation.

Zusätzlich muss die nötige .jar-Datei des Datenbanktreibers neben die “application.yml” gelegt werden.

Queues

Legt fest, aus welcher Queue der Service Zeiträume konsumiert und in welche Queue er die aufbereiteten Nachrichten schreibt.

consumer-queue: work_package_queue
production-queue: persistence_queue
production-queue-max-size: 1000
Parameter Standard Beschreibung
consumer-queue work_package_queue Queue, aus der Archivierungszeiträume gelesen werden.
production-queue persistence_queue Queue, in die aufbereitete Nachrichten geschrieben werden.
production-queue-max-size 1000 Maximale Anzahl Nachrichten in der Persistence Queue. Der Service pausiert, solange dieser Schwellenwert überschritten wird.

Nachrichtenfilter

Steuert, welche Nachrichten und Attribute für die Archivierung berücksichtigt werden.

message:
  states: SUC,MAN
  include-additional-columns: false
attribute:
  ids: ${ATTRIBUTE_IDS}
Parameter Standard Beschreibung
message.states SUC,MAN Kommaseparierte Liste der Nachrichtenstatus, die archiviert werden. Standardmäßig erfolgreich abgeschlossene (SUC) und manuell beendete (MAN) Nachrichten.
message.include-additional-columns false Gibt an, ob zusätzliche Datenbankspalten der Nachricht ebenfalls archiviert werden.
attribute.ids Kommaseparierte Liste der Attribut-IDs, die je Nachricht geladen und archiviert werden.

RabbitMQ-Anbindung

Verbindungsdaten zum RabbitMQ-Broker.

spring:
  rabbitmq:
    host: ${RABBITMQ_HOST}
    port: ${RABBITMQ_PORT}
    username: ${RABBITMQ_USER}
    password: ${RABBITMQ_PASSWORD}

Datenbankanbindung

Verbindungsdaten zur B2B-Datenbank.

spring:
  datasource:
    driver-class-name: ${DATABASE_DRIVER_CLASS_NAME}
    url: ${DATABASE_URL}
    username: ${DATABASE_USER}
    password: ${DATABASE_PASSWORD}
Die passende .jar-Datei des Datenbanktreibers muss neben die “application.yml” gelegt werden.

Optionaler zweistufiger Workflow (Message Archive Data Loading)

Standardmäßig deaktiviert. Wird für Umgebungen mit sehr großen Zeiträumen empfohlen, um den Arbeitsspeicherverbrauch konstant zu halten. Siehe auch Funktionsbeschreibung.

message-archive-data-loading:
  enabled: true
  queue: b2b.archiving.message_archive_data_loading_queue
  queue-type: QUORUM
  prefetch: 1
  queue-max-size: 100000
Parameter Standard Beschreibung
enabled false Aktiviert den zweistufigen Workflow.
queue message_archive_data_loading_queue Name der Zwischen-Queue für Einzelnachrichten ohne Attribute.
queue-type QUORUM RabbitMQ Queue-Typ. QUORUM für Cluster-Deployments (empfohlen), CLASSIC für lokale Einzelknoten-Umgebungen.
prefetch 1 Maximale Anzahl gleichzeitig vom Stufe-2-Consumer gehaltener, unbestätigter Nachrichten. Niedrig halten, da je Nachricht Attribute geladen werden.
queue-max-size 100000 Maximale Anzahl Nachrichten in der Zwischen-Queue. Stufe 1 pausiert, solange dieser Schwellenwert überschritten wird.

Nachrichtenarchivstatus (optional, nur für Entwicklung/Test)

Im Normalbetrieb müssen diese Werte nicht gesetzt werden.

message-archive-state:
  doUpdateToPending: true
  pending: ARP
Parameter Standard Beschreibung
doUpdateToPending: false true Deaktiviert die Statusaktualisierung an der Nachricht. Nur für Tests im Read-only-Modus gegen eine Datenbank setzen.
pending ARP Statuswert, auf den die Nachricht vor der Archivierung gesetzt wird.

Releases

Der Service wird in den folgenden Versionen als Docker Container über unsere Registry docker-nob-erp.next-level-apps.com/data-loader bereitgestellt.

2026-08-xx

Ticket Beschreibung
BTOB-14417 Optionaler zweistufiger Workflow zur Vermeidung von RAM-Engpässen bei Zeiträumen mit sehr vielen Nachrichten. Über den neuen Parameter message-archive-data-loading.enabled (Standard: false) wird ein Zeitraum in einzelne Nachrichten über eine Zwischen-Queue (message-archive-data-loading.queue, Standard message_archive_data_loading_queue) aufgeteilt und einzeln verarbeitet. Der Queue-Typ ist über message-archive-data-loading.queue-type konfigurierbar (Standard: quorum). Beide Stufen werden verlustfrei gedrosselt: Stufe 1 über message-archive-data-loading.queue-max-size (Standard 100.000), Stufe 2 über production-queue-max-size (Standard 1.000). Weitere Parameter: message-archive-data-loading.prefetch. Schlägt die Verarbeitung einer Einzelnachricht fehl, verbleibt diese per Requeue in der Queue. Bei deaktiviertem Parameter bleibt das bisherige Verhalten unverändert.

2025-12-17

Ticket Beschreibung
BTOB-13764 Hinzufügen eines neuen Konfigurationsparameters message.include-additional-columns (true/false), die es erlaubt, den Inhalt der zusätzlichen Spalten ebenfalls zu archivieren.

2024-09-06

Ticket Beschreibung
BTOB-12678 Die RAM-Überlastung durch eine große Anzahl an Nachrichten wird verhindert, da die persistence_queue nun auf 1000 Nachrichten begrenzt ist. Der data-loader Service pausiert, solange dieser Schwellenwert überschritten wird.

2024-02-28

Ticket Beschreibung
BTOB-12126 Komprimierte Attribute werden in der B2B-Datenbank nicht mehr mit dem dekomprimierten Inhalt überschrieben

2023-08-09

Ticket Beschreibung
BTOB-11557 Nachrichten, die in derselben Zeitscheibe lagen, wurden mit gleichem Inhalt archiviert. Dies wurde nun behoben
BTOB-11563 Archivierung als Service: Große Datenbank-Attribute-Werte werden nun so archiviert, dass sie lesbar angezeigt werden

2023-03-16

Ticket Beschreibung
BTOB-8617 Erweiterung des data-loaders um beliebige B2B Nachrichten. Zudem: Konfigurierbare Ausführung im “read-only” (doUpdateToPending) Modus.

2022-11-23

Ticket Beschreibung
BTOB-8713 Auch Nachrichten ohne Verarbeitungs-Ende Zeit können nun zur Archivierung geladen werden.

2021-06-28

Ticket Beschreibung
BTOB-7496 Initiale Entwicklung
View Me   Edit Me