Durable Subscriber
Le subscriber qui ne perd pas son fil — fondamental pour les flux EDI qu'on ne peut pas se permettre de manquer.
Problème
Un publish-subscribe channel classique délivre uniquement aux subscribers connectés au moment de la publication. Un partenaire EDI qui redémarre perd les messages émis pendant son indisponibilité.
Forces
- Les flux EDI sont asynchrones — un partenaire offline 6h ne doit pas perdre les ORDRSP publiés pendant ce temps.
- Stocker tous les messages pour tous les subscribers absents consomme du stockage broker.
- Identifier un subscriber durable nécessite une identité stable (clientId).
- Les messages persistés expirent selon une politique TTL ou capacity-based.
Solution
Le subscriber s'inscrit avec un identifiant stable (`clientId` JMS, `group.id` Kafka, queue durable AMQP). Le broker garde un curseur par subscriber durable et stocke les messages non lus jusqu'à délivrance. À la reconnexion, le broker délivre l'arriéré dans l'ordre. La durabilité est explicite — un subscriber non-durable se comporte comme un tap éphémère.
Implémentation EDI
En EDI, le Durable Subscriber est typique pour la diffusion d'événements internes (`InvoiceReceived`, `MDNReceived`) vers plusieurs sous-systèmes (ERP, lake analytics, customer portal). Kafka avec un `group.id` par sous-système matérialise le pattern : chaque consumer group conserve son offset, et un redémarrage d'un sous-système reprend où il s'était arrêté. Limites : si le retention (`log.retention.hours`) est trop court, un long downtime efface l'arriéré.
Anti-patterns
- ClientId généré aléatoirement à chaque démarrage — chaque restart crée un nouveau subscriber durable et duplique le backlog.
- Retention sous-dimensionnée — un weekend offline = perte de tous les messages.
- Subscriber durable inutilisé non purgé — accumulation indéfinie de backlog.
- Utiliser un subscriber durable pour un flux best-effort — gaspillage de stockage.
Patterns liés
- Publish-Subscribe Channel — topologie sur laquelle le pattern s`applique.
- Guaranteed Delivery — principe broker complémentaire.
- Message Store — persistance applicative.
Sources
- Hohpe G., Woolf B. — EIP, Durable Subscriber (p. 522). www.enterpriseintegrationpatterns.com/patterns/messaging/DurableSubscription.html
- Apache Kafka — Consumer Groups. kafka.apache.org/documentation/#consumerconfigs