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:
- 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). - 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.
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.
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}
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 |