Message Channel
Avant de parler de routage, de traduction ou d'agrégation, il faut nommer ce qui sépare deux applications : le canal. EIP §60 pose cette brique élémentaire que toute la suite du catalogue habille de sémantiques plus riches.
Problème
Deux applications doivent échanger des messages sans se connaître directement. Si l'émetteur ouvre une socket TCP sur l'IP du récepteur, on couple le code des deux côtés au transport, à la disponibilité simultanée, à la stabilité réseau. À la première panne ou au premier ajout d'un troisième consommateur, tout s'effondre. En EDI, on a en plus des contraintes de chiffrement, de signature, d'accusé ; et l'émetteur ne sait souvent pas si le récepteur est connecté. Il faut donc une abstraction qui représente le conduit lui-même — adressable, typée, avec une sémantique de livraison définie.
Forces
- Découplage spatial. L'émetteur ne doit pas connaître l'IP ni la disponibilité du récepteur, seulement le nom du canal.
- Découplage temporel. L'émetteur et le récepteur ne doivent pas tourner au même moment ; le canal peut bufferiser.
- Typage. Un canal ne transporte pas n'importe quoi : on lui associe un type (ORDERS, INVOIC, MDN…) pour qu'un consommateur ne lise pas un message qu'il ne peut pas traiter.
- Sémantique de livraison. At-most-once, at-least-once, exactly-once — chacune a son coût et ses compromis ; le canal doit la déclarer.
- Durabilité. Persiste-t-on les messages sur disque ou non ? Trade-off latence ↔ tolérance aux pannes.
Solution
EIP §60 (Hohpe & Woolf, 2003) définit le Message Channel comme un conduit logique nommé entre deux ou plusieurs participants. Le canal porte cinq attributs essentiels : un nom adressable (URI, sujet JMS, queue ARN, topic Kafka), une direction (input / output / bidirectionnel), un type de message (schema accepté), une sémantique de livraison (at-most-once, at-least-once, exactly-once) et un profil de durabilité (persistant, mémoire, signé). Le code applicatif ne se relie pas à un peer, il se relie à un canal.
Application A Application B
───────────── ─────────────
┌──────────┐ channel ┌──────────┐
│ producer │ ───────────────────────▶ │ consumer │
└──────────┘ addressable conduit └──────────┘
- direction
- typage du message
- sémantique de livraison
- durabilité Implémentation EDI
En EDI, chaque connexion partenaire est, conceptuellement, un canal distinct :
- Canal AS2 point-à-point. Une connexion AS2 entre
deux partenaires (RFC 4130) est un canal bilatéral, chiffré
(CMS / PKCS#7), signé, avec accusé MDN. Le nom du canal est
typiquement le couple
(AS2-From, AS2-To). Une direction par sens. - Canal SFTP. Un répertoire de drop sur un serveur
SFTP est un canal asynchrone par fichier. Le nom du canal est le
chemin (
/edi/in/walmart/). Pas de livraison transactionnelle par défaut, donc surface d'idempotence requise en aval. - Canal AS4 PEPPOL. Un Access Point reçoit sur une URL HTTPS un message AS4 ; le canal est le couple (endpoint URL, participant ID). La sémantique de livraison est at-least-once (NRR garanti par WS-ReliableMessaging).
- Canal interne Kafka / RabbitMQ. Entre le hub
d'intégration et les microservices internes, des canaux topic
Kafka (
edi.invoic.in.canonical) ou queue RabbitMQ avec retention configurée.
# AS2 message envelope — canal point-à-point chiffré et signé
POST /as2 HTTP/1.1
Host: partner.example.com
Content-Type: application/pkcs7-mime; smime-type=enveloped-data
AS2-From: SUPPLIER_GLN
AS2-To: BUYER_GLN
Message-ID: <inv-202605140001@ediverse.io>
Disposition-Notification-To: as2@ediverse.io
Disposition-Notification-Options: signed-receipt-protocol=optional, pkcs7-signature;
signed-receipt-micalg=optional, sha-256
EDIINT-Features: multiple-attachments, AS2-Reliability
<encrypted-EDIFACT-payload> Lecture : l'en-tête HTTP AS2 porte les attributs du canal — From / To identifient les pairs, Message-ID indique la sémantique d'unicité, Disposition-Notification-To réclame l'accusé MDN. L'application émettrice ne sait pas comment le canal est implémenté en dessous (TLS, routage IP, retry HTTP) ; elle publie sur le canal AS2 logique.
Taxonomie des canaux
Hohpe regroupe les canaux en quatre familles fondamentales :
- Point-to-Point Channel (EIP §103) — un seul consommateur reçoit chaque message. Équivalent EDI : AS2 entre deux partenaires.
- Publish-Subscribe Channel (EIP §106) — plusieurs consommateurs reçoivent chaque message. Équivalent EDI : un SBDH UBL routé via PEPPOL vers plusieurs AP destinataires d'une même facture.
- Datatype Channel (EIP §111) — un canal ne
transporte qu'un type de message. Équivalent EDI :
edi.orders.canonicaletedi.invoic.canonicalséparés. - Invalid Message Channel (EIP §115) — où vont les messages mal formés. Voir Dead Letter Channel.
Anti-patterns
- Couplage au transport. Écrire dans le code
applicatif
new Socket("partner.example.com", 21)au lieu depublish("partner.invoic.out"). Migration vers AS4 impossible sans réécriture. - Canal poubelle. Un canal nommé
edi.inqui reçoit tous les types de messages. On retombe alors sur la nécessité d'un Message Router en amont — autant le nommer. - Sémantique de livraison implicite. Ne pas déclarer si le canal est at-most-once ou at-least-once mène inévitablement à des incidents de doublons ou de pertes.
- Canaux non versionnés. Quand le schéma d'un type
évolue, créer
edi.invoic.v2.canonicalà côté plutôt que de casser tous les consommateurs.
Patterns liés
- Point-to-Point Channel — spécialisation pour un consommateur unique.
- Publish-Subscribe Channel — spécialisation pour la diffusion.
- Message Bus — assemblage de canaux en backbone.
- Dead Letter Channel — canal spécial pour les messages non traitables.
Sources
- Hohpe G., Woolf B. — Enterprise Integration Patterns, pattern Message Channel (§60). enterpriseintegrationpatterns.com — Message Channel
- RFC 4130 — MIME-Based Secure Peer-to-Peer Business Data Interchange Using HTTP, Applicability Statement 2 (AS2). IETF, juillet 2005. rfc-editor.org/rfc/rfc4130
- Apache Camel — Channel Adapter et concept de Component / Endpoint, application concrète du canal en configuration. camel.apache.org — Component
- OASIS ebXML Messaging Services v3.0 (AS4). La définition formelle d'un canal AS4 entre Access Points PEPPOL.