Résumé
Dans RabbitMQ, la durabilité n’est pas une case à cocher sur une queue. Un message traverse un producteur, un exchange, une queue et un consommateur, et chaque étape peut le perdre à sa façon. L’article suit ce chemin et place cinq réglages là où ils agissent: un exchange et une queue durables, un message publié en mode persistant (delivery mode 2), les publisher confirms, le flag mandatory et l’acquittement manuel côté consommateur.
Chaque réglage couvre une panne différente. La durabilité garde la topologie au redémarrage, mais pas les messages; la persistance garde les messages, mais l’écriture sur disque se fait par lots; le confirm dit au producteur que le broker a pris en charge le message, mais il arrive aussi pour un message que rien n’a routé et que le broker a jeté; le flag mandatory renvoie ce message au producteur; l’acquittement manuel évite qu’un consommateur qui tombe emporte le message en cours de traitement, au prix de redélivrances qu’il faut traiter de façon idempotente.
Survivre au redémarrage d’un nœud ne suffit pas à survivre à sa perte. L’article compare les classic mirrored queues, où un master réplique vers des mirrors et où un mirror non synchronisé peut être promu, et les quorum queues de RabbitMQ 3.8, fondées sur Raft, qui confirment un message une fois qu’une majorité de répliques l’a écrit. Il liste aussi ce que les quorum queues ne savaient pas faire en 3.8 (TTL, priorités, queues non durables ou exclusives) et les pièges de routage qui produisent les messages non routés.
Idées clés
- La durabilité d’une queue ne rend pas ses messages durables: il faut un exchange durable, une queue durable et un message publié avec delivery mode 2.
- Un publisher confirm dit que le broker a pris en charge le message, pas qu’une queue le contient: un message non routé est confirmé puis jeté, sauf s’il est publié avec mandatory.
- L’acquittement manuel, envoyé après le traitement, évite de perdre un message en cours quand un consommateur tombe; les redélivrances qui en découlent imposent un traitement idempotent.
- Une classic mirrored queue confirme quand tous les mirrors ont accepté le message, mais peut promouvoir un mirror non synchronisé; une quorum queue confirme une fois le message écrit par une majorité de répliques et tolère la perte d’une minorité.
- En 3.8, une quorum queue est toujours durable et ne gère ni TTL, ni priorités, ni exclusivité: c’est le bon choix pour une queue critique et durable, pas pour une queue temporaire.