La consommation ordonnée garantit la remise des messages aux consommateurs dans l'ordre de leur publication. ApsaraMQ for RabbitMQ y parvient grâce au mode Single Active Consumer et à un tri fusion sur les partitions de stockage distribuées, offrant ainsi les mêmes garanties d'ordonnancement que RabbitMQ open source.
Fonctionnement
La consommation ordonnée repose sur deux conditions : un stockage ordonné et un consommateur unique.
RabbitMQ open source
Consommateur unique : RabbitMQ open source prend en charge deux modes : Single Active Consumer et Exclusive Consumer. La communauté open source recommande le mode Single Active Consumer.
Stockage ordonné : Les messages d'une même file d'attente sont lus et écrits sur un seul nœud, ce qui préserve intrinsèquement leur ordre.
ApsaraMQ for RabbitMQ
Consommateur unique : ApsaraMQ for RabbitMQ utilise le mode Single Active Consumer recommandé par la communauté open source.
Stockage ordonné : ApsaraMQ for RabbitMQ s'appuie sur une architecture distribuée dissociant le stockage du calcul. Les messages d'une file d'attente unique sont répartis sur plusieurs partitions hébergées par différents nœuds. Les nœuds de calcul lisent les messages depuis ces partitions de stockage, effectuent un tri fusion et les remettent au consommateur dans le bon ordre. Cette approche offre les mêmes garanties de consommation ordonnée que RabbitMQ open source.
Tri fusion dans l'architecture distribuée
En mode Single Active Consumer, une file d'attente ne maintient qu'une seule connexion active ; toutes les autres restent inactives. Le nœud de calcul détenant la connexion active extrait les messages de tous les nœuds de stockage, les trie et les remet au consommateur.
Le nœud de calcul mettant en cache certains messages avant leur remise, un basculement de la connexion active vers un autre nœud de calcul entraîne la réintégration de ces messages mis en cache dans la file de consommation pour redistribution.
Avantages
Par rapport à RabbitMQ open source, l'architecture distribuée d'ApsaraMQ for RabbitMQ offre :
Haute concurrence et extensibilité : Plusieurs partitions permettent des écritures hautement concurrentes et une mise à l'échelle horizontale.
Haute disponibilité : Plusieurs consommateurs peuvent se connecter à plusieurs nœuds de calcul. En cas de défaillance d'un consommateur ou d'un nœud de calcul, le système bascule rapidement vers un nœud sain afin de maintenir la continuité du service.
Activer la consommation ordonnée
Pour activer la consommation ordonnée, définissez l'argument x-single-active-consumer sur true lors de la création de la file d'attente.
Le serveur triant les messages avant leur remise, le débit de consommation peut diminuer. Vérifiez si votre cas d'utilisation nécessite une consommation ordonnée avant d'activer cette fonctionnalité.
Limites
La consommation ordonnée est disponible uniquement pour les éditions d'instance suivantes :
Enterprise Edition
Platinum Edition
Serverless Edition