Simple Message Queue (anciennement MNS) prend en charge les messages ordonnés. Cette rubrique décrit les concepts clés, les différences par rapport aux messages standards, les méthodes de création et d'utilisation, les instructions relatives à l'API, ainsi que les limites et bonnes pratiques associées.
Définition de la fonctionnalité
Simple Message Queue (anciennement MNS) assure un traitement premier entré, premier sorti (FIFO) pour les messages appartenant au même groupe, garantissant ainsi une gestion séquentielle dans les scénarios métier.
Scénarios
Les messages ordonnés sont idéaux pour les scénarios métier exigeant un ordre strict des messages :
-
Transitions d'état des commandes
Dans les systèmes de commande e-commerce, les états tels que création de la commande → paiement → expédition → confirmation de livraison doivent être traités dans l'ordre chronologique afin de maintenir la cohérence de l'état métier.
-
Traitement des transactions financières
Dans les systèmes de trading boursier ou d'actions, les ordres présentant des prix d'achat identiques doivent être traités strictement selon l'ordre de leur soumission. Les systèmes en aval doivent gérer ces ordres conformément à leur séquence de soumission.
-
Synchronisation de base de données
Les bases de données en amont effectuent des opérations d'insertion, de suppression ou de mise à jour. Les journaux binaires sont transmis sous forme de messages aux systèmes en aval, qui les rejouent pour actualiser les données d'état de manière séquentielle et éviter toute incohérence des données.
-
Enregistrement des journaux métier
Les journaux des opérations métier critiques doivent être stockés strictement dans l'ordre chronologique pour faciliter l'audit et le dépannage.
Concepts clés
MessageGroupId : Identifiant de groupe de messages. Le système garantit l'ordre des messages au sein de chaque groupe : les messages partageant le même
MessageGroupIdsont traités strictement dans l'ordre, tandis que les messages provenant de groupes différents peuvent être traités en parallèle.Délai de visibilité : Une fois extrait avec succès, un message reste invisible pour les autres consommateurs jusqu'à l'expiration du délai. Cela empêche plusieurs consommateurs de traiter simultanément le même message. Si le message n'est pas confirmé comme supprimé avant l'expiration du délai, il redevient visible.
Mécanisme de verrouillage de groupe : Dans une file d'attente ordonnée, dès qu'un message avec un
MessageGroupIdspécifique est extrait mais non confirmé comme supprimé (c'est-à-dire qu'il reste invisible), tous les messages suivants du mêmeMessageGroupIdsont bloqués. Cela garantit un ordre de consommation strict. Ce n'est qu'après la confirmation de la suppression du message actuel ou l'expiration de son délai de visibilité que le message suivant du même groupe peut être extrait.
Différences par rapport aux messages standards
-
Sémantique d'ordonnancement :
Messages standards (file d'attente/sujet standard) : Livraison au moins une fois selon la meilleure effort, sans garantie d'ordre.
Messages ordonnés (file d'attente/sujet FIFO) : Au sein du même
MessageGroupId, les messages sont consommés strictement dans l'ordre de leur arrivée sur le serveur. Les messages antérieurs doivent être entièrement traités avant que les suivants ne puissent être consommés.
-
Modèle de concurrence :
Messages standards : Aucune restriction de regroupement ; optimisé pour le débit global.
Messages ordonnés : Utilisent le
MessageGroupIdcomme unité de concurrence — série au sein d'un groupe, parallèle entre les groupes.
-
Exigences relatives aux messages :
L'envoi d'un message ordonné nécessite la spécification d'un
MessageGroupId(s'applique aux files d'attente et aux sujets).
Prise en main
File d'attente FIFO
-
Créez une file d'attente :
Connectez-vous à la console Simple Message Queue (anciennement MNS).
Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région.
Sur la page Queues, cliquez sur Create Queue.
-
Dans le panneau Create Queue, définissez le paramètre Queue Type sur FIFO Queue, configurez les autres paramètres, puis cliquez sur OK.
Les autres paramètres configurables incluent Maximum Message Length, Long polling period, Visibility Timeout Period, Message retention period, Message Delay Period, Enable Logging Feature, Dead-letter policy et Throttling Policy.
-
Envoyez des messages :
Utilisez
SendMessageet incluez unMessageGroupId. Utilisez une clé métier stable, telle qu'un ID de commande.Si vous omettez le
MessageGroupId, le système renvoie le code d'erreurFifoMissingMessageGroupId.
-
Recevez et confirmez :
Utilisez
ReceiveMessagepour extraire les messages. La réponse inclut leMessageGroupId. Après le traitement, appelezDeleteMessagepour confirmer.
Sujet FIFO
-
Créez un sujet :
Connectez-vous à la console Simple Message Queue (anciennement MNS).
Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région.
Sur la page Topics, cliquez sur Create Topic.
Dans le panneau Create Topic, définissez le paramètre Topic Type sur FIFO Topic, configurez les autres paramètres, puis cliquez sur OK.
-
Créez un abonnement :
Abonnez-vous à une file d'attente FIFO pour garantir l'ordre des messages. Les sujets standards ne peuvent s'abonner qu'à des files d'attente standards. Pour plus de détails, consultez la section Étape 3 : Créer un abonnement.
-
Publiez des messages :
Utilisez
PublishMessageet incluez unMessageGroupId.Si vous omettez le
MessageGroupId, le système renvoie le code d'erreurFifoMissingMessageGroupId.
-
Consommez et confirmez :
Côté file d'attente FIFO abonnée, utilisez
ReceiveMessagepour extraire les messages etDeleteMessagepour confirmer, en maintenant un traitement séquentiel au sein de chaque groupe.
Utilisation de l'API
API liées aux files d'attente
|
Nom de l'API |
Description des paramètres |
Description de la valeur de retour |
|
CreateQueue-Créer une file d'attente |
Paramètre d'entrée
|
Crée une file d'attente du type spécifié. |
|
GetQueueAttributes-Obtenir les attributs de la file d'attente |
Aucun paramètre spécial |
Renvoie les informations de la file d'attente, y compris le champ |
|
ListQueue-Répertorier toutes les files d'attente sous un compte Alibaba Cloud |
Aucun paramètre spécial |
Renvoie une liste de files d'attente. Chaque file d'attente inclut le champ |
API liées aux sujets
|
Nom de l'API |
Description des paramètres |
Description de la valeur de retour |
|
CreateTopic-Créer un sujet |
Paramètre d'entrée
|
Crée un sujet du type spécifié. |
|
GetTopicAttributes-Obtenir les attributs du sujet |
Aucun paramètre spécial |
Renvoie les informations du sujet, y compris le champ |
|
ListTopic-Répertorier les sujets sous un compte Alibaba Cloud |
Aucun paramètre spécial |
Renvoie une liste de sujets. Chaque sujet inclut le champ |
API d'envoi/réception de messages
|
Nom de l'API |
Exigences relatives aux paramètres |
Description de la valeur de retour |
Notes |
|
Les files d'attente FIFO nécessitent un |
Réponse standard. |
Envoie un seul message à une file d'attente. |
|
|
Les files d'attente FIFO nécessitent un |
Réponse standard. |
Envoie plusieurs messages à une file d'attente par lot. |
|
|
Les sujets FIFO nécessitent un |
Réponse standard. |
Publie un message sur un sujet. |
|
|
Aucun paramètre spécial. |
Le corps de la réponse inclut le |
Reçoit un seul message d'une file d'attente. |
|
|
Prend en charge le paramètre |
Le corps de la réponse inclut le |
Peut renvoyer des messages provenant de plusieurs groupes. L'ordre est préservé au sein de chaque groupe. |
Limites
Les régions prises en charge incluent Chine (Shenzhen), Chine (Shanghai) et Chine (Hangzhou). Pour demander la prise en charge FIFO dans d'autres régions, soumettez un ticket.
ID de groupe requis : L'envoi de messages à une file d'attente ou un sujet FIFO nécessite un
MessageGroupId.-
Compatibilité des types :
Files d'attente de lettres mortes (DLQ) : Seules les files d'attente du même type peuvent être liées. Les messages FIFO ne peuvent être liés qu'à des files d'attente de lettres mortes FIFO, et les messages standards ne peuvent être liés qu'à des files d'attente de lettres mortes standards.
Abonnements : Les sujets standards ne peuvent s'abonner qu'à des files d'attente standards. Pour une livraison ordonnée, abonnez les sujets FIFO aux files d'attente FIFO.
Consultation non prise en charge : Les files d'attente FIFO ne prennent pas en charge l'interface de consultation des messages (PeekMessage).
Bonnes pratiques
-
Conception des groupes :
Utilisez des valeurs
MessageGroupIdstables et uniformément réparties (telles que des ID de commande) pour éviter que quelques groupes à forte activité ne deviennent des goulots d'étranglement en termes de performances.Pour les charges de travail extrêmement sollicitées, subdivisez les groupes au niveau de l'application afin d'augmenter la concurrence.
Délai de visibilité : Définissez ce paramètre en fonction de la durée réelle de traitement pour garantir que votre application termine le traitement et confirme le message avant l'expiration du délai, réduisant ainsi les livraisons en double.
Idempotence et nouvelles tentatives : Implémentez un traitement idempotent et une logique de nouvelle tentative dans les consommateurs pour assurer la cohérence de bout en bout.
Réception par lot : Augmentez la valeur de
numOfMessagespour améliorer le débit, tant que le délai de traitement par message reste acceptable.
FAQ
Comment l'ordre est-il défini ?
Les messages partageant le même MessageGroupId sont livrés et traités strictement dans l'ordre d'envoi. Les messages provenant de groupes différents peuvent être traités en parallèle.
Dois-je fournir un MessageGroupId?
Oui. L'envoi de messages à une file d'attente ou un sujet FIFO nécessite un MessageGroupId. Sans cela, l'ordre ne peut pas être garanti.
Comment choisir entre les files d'attente/sujets FIFO et standards ?
Utilisez des files d'attente ou des sujets FIFO si votre activité nécessite un ordre strict (comme les transitions d'état des commandes). Privilégiez les files d'attente ou sujets standards si vous accordez la priorité au débit global et à l'élasticité, sans exiger l'ordonnancement des messages. Pour commencer, créez une FIFO Queue ou un FIFO Topic dans la console, incluez le MessageGroupId lors de l'envoi et lisez cet attribut côté consommateur pour un traitement et une confirmation ordonnés.