Dans ApsaraMQ for RocketMQ, une file d'attente est un journal en ajout seul (append-only) et ordonné qui stocke et distribue les messages. Il s'agit de la plus petite unité de stockage. Les producteurs ajoutent les nouveaux messages à la fin de la file. Les consommateurs lisent les messages depuis n'importe quelle position en utilisant un offset (décalage), c'est-à-dire un entier séquentiel indexant la position de chaque message dans le journal. Le consommateur contrôle cet offset : il peut lire vers l'avant, sauter directement à la dernière position ou revenir à un offset antérieur pour rejouer l'historique.
Chaque topic (et lightweight topic) comprend une ou plusieurs files d'attente. Ces dernières offrent deux fonctionnalités principales :
Stockage ordonné : les messages au sein d'une file conservent leur ordre d'écriture. Le message le plus ancien se trouve en tête de file, tandis que le plus récent se situe à la fin. Les consommateurs utilisent l'offset pour suivre leur position de lecture.
Sémantique de streaming : grâce à ce modèle de stockage basé sur des files, les consommateurs peuvent lire n'importe quelle plage de messages à partir de n'importe quel offset. Cela permet des lectures agrégées (consommation par lot sur une plage) et des lectures rétroactives (rejeu des messages précédents). Les brokers traditionnels tels que RabbitMQ et ActiveMQ ne prennent pas en charge ces opérations, car ils ne disposent pas d'un modèle de stockage basé sur des files.
Relation entre les files d'attente et les topics
Le diagramme suivant illustre l'intégration des files d'attente dans le modèle de domaine d'ApsaraMQ for RocketMQ :

Un topic représente un regroupement logique de messages. Les files d'attente constituent les composants physiques de stockage au sein d'un topic, où les messages sont persistés et lus. Bien que toutes les ressources de messages soient gérées au niveau du topic et du lightweight topic, les opérations réelles s'effectuent sur les files d'attente. Par exemple, lorsqu'un producteur envoie un message à un topic, le broker le transfère vers l'une des files d'attente associées à ce topic.
Tous les messages envoyés avec succès sont stockés de manière durable. Combiné aux accusés de réception des clients producteurs et consommateurs, ce mécanisme garantit une sémantique de distribution « au moins une fois » (at-least-once).
Les files d'attente dans ApsaraMQ for RocketMQ jouent le même rôle que les partitions dans Apache Kafka. Si vous connaissez les partitions Kafka, le modèle de file d'attente fonctionne de la même manière.
Mise à l'échelle horizontale
ApsaraMQ for RocketMQ met à l'échelle horizontalement le système en ajustant le nombre de files d'attente dans un topic :
Mise à l'échelle ascendante (scaling out) : ajoutez des files d'attente pour répartir la charge sur davantage de nœuds de service.
Mise à l'échelle descendante (scaling in) : supprimez des files d'attente pour consolider les ressources.
Autorisations de lecture et d'écriture
Contraintes relatives au nombre de files d'attente
Le nombre de files d'attente pour chaque topic ou lightweight topic dépend des éléments suivants :
Le type de message
La région où réside l'instance
Le nombre de files d'attente est géré par le système et ne peut pas être modifié.
Compatibilité des versions
La convention de nommage des files d'attente varie selon les versions du service :
| Version | Format du nom de la file d'attente | Relation avec les nœuds |
|---|---|---|
| 3.x et 4.x | Triplet : {Topic Name}+{Broker ID}+{Queue ID} |
Liée à un nœud physique |
| 5.x | Chaîne globalement unique attribuée par le cluster | Découplée des nœuds physiques |
Ne codez jamais en dur ni ne supposez un format spécifique de nom de file d'attente dans votre application. Les noms de files construits manuellement cessent de fonctionner après une mise à niveau de version, car la convention de nommage change.
Bonnes pratiques pour le dimensionnement des files d'attente
Maintenez un nombre réduit de files d'attente
N'utilisez que le nombre de files d'attente requis par votre charge de travail. Un excès de files d'attente entraîne deux problèmes :
Surcharge des métadonnées : les métriques sont collectées au niveau de la file d'attente. Plus il y a de files, plus il y a de métadonnées du plan de contrôle à gérer.
Gaspillage des ressources client : les lectures et les écritures s'effectuent par file d'attente. Les files inactives génèrent des requêtes de sondage à vide qui consomment des ressources côté client et serveur.
Quand ajouter des files d'attente ?
Équilibrage de charge des nœuds physiques : après avoir ajouté des nœuds à un cluster, créez des files d'attente sur les nouveaux nœuds ou migrez les files existantes afin de répartir le trafic de manière homogène.
Débit des messages ordonnés (v4.x) : dans la version 4.x du service, l'ordre des messages n'est garanti qu'au sein d'une seule file d'attente. Le nombre de files limite donc directement la concurrence des messages ordonnés. N'ajoutez des files que si vous rencontrez un goulot d'étranglement au niveau des performances.
Messages non ordonnés sur la v5.x — aucune action requise : la version 5.x du service prend en charge l'équilibrage de charge des consommateurs au niveau des messages. Les messages au sein d'une même file sont distribués uniformément sur tous les consommateurs, de sorte que le nombre de files n'affecte pas la concurrence de consommation. Pour plus de détails, consultez Équilibrage de charge des consommateurs.