ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

Transactional Client

L'atomicité métier ↔ messaging — la garantie 'message envoyé si et seulement si DB committée'.

Problème

Une application traite un PO entrant : (1) écrit en base, (2) envoie un ACK 855 sortant. Que faire si (1) réussit mais (2) échoue ? Réessayer (1) re-crée le PO. Le partenaire attend l'ACK en vain.

Forces

  • Une transaction atomique entre messaging et DB demande un protocole 2PC ou un pattern alternatif.
  • 2PC est lent et fragile.
  • Ne rien faire entraîne des incohérences observées en prod.
  • Le pattern Outbox (alternative moderne) résout sans 2PC mais ajoute de la latence.

Solution

Deux options : (a) protocol XA / 2PC entre broker et DB, peu utilisé en pratique pour son coût ; (b) Outbox pattern : la transaction DB inclut l'écriture du message dans une table 'outbox', un worker async lit cette table et publie sur le broker. Le Transactional Client garantit que message et DB-state sont cohérents — soit les deux, soit aucun.

Implémentation EDI

En EDI moderne, l'implémentation dominante est Outbox : INSERT INTO outbox_table (msg_id, payload, status='pending') dans la même transaction que l'INSERT INTO orders. Un worker Debezium / CDC consomme la table, publie dans Kafka, marque status='sent'. Garantit l'atomicité métier+messaging sans 2PC.

Anti-patterns

  • Send-then-DB (envoyer avant de committer) — risque double-traitement si le commit échoue.
  • DB-then-send sans Outbox — risque de message perdu si l'app crash entre.
  • 2PC entre Kafka et Postgres — coût opérationnel trop élevé pour les volumes EDI.

Patterns liés

Sources