Tous les produits
Search
Centre de documentation

Simple Message Queue (formerly MNS):Message ordonné

Dernière mise à jour :Sep 21, 2026

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 MessageGroupId sont 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 MessageGroupId spécifique est extrait mais non confirmé comme supprimé (c'est-à-dire qu'il reste invisible), tous les messages suivants du même MessageGroupId sont 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 MessageGroupId comme 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 :

    1. Connectez-vous à la console Simple Message Queue (anciennement MNS).

    2. Dans le volet de navigation de gauche, choisissez Queue Model > Queues.

    3. Dans la barre de navigation supérieure, sélectionnez une région.

    4. Sur la page Queues, cliquez sur Create Queue.

    5. 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 SendMessage et incluez un MessageGroupId. Utilisez une clé métier stable, telle qu'un ID de commande.

    • Si vous omettez le MessageGroupId, le système renvoie le code d'erreur FifoMissingMessageGroupId.

  • Recevez et confirmez :

    • Utilisez ReceiveMessage pour extraire les messages. La réponse inclut le MessageGroupId. Après le traitement, appelez DeleteMessage pour confirmer.

Sujet FIFO

  • Créez un sujet :

    1. Connectez-vous à la console Simple Message Queue (anciennement MNS).

    2. Dans le volet de navigation de gauche, choisissez Topic Model > Topics.

    3. Dans la barre de navigation supérieure, sélectionnez une région.

    4. Sur la page Topics, cliquez sur Create Topic.

    5. 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 PublishMessage et incluez un MessageGroupId.

    • Si vous omettez le MessageGroupId, le système renvoie le code d'erreur FifoMissingMessageGroupId.

  • Consommez et confirmez :

    • Côté file d'attente FIFO abonnée, utilisez ReceiveMessage pour extraire les messages et DeleteMessage pour 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 QueueType :

  • normal (file d'attente standard)

  • fifo (file d'attente FIFO)

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 QueueType.

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 QueueType.

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 TopicType :

  • normal (sujet standard)

  • fifo (sujet FIFO)

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 TopicType.

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 TopicType.

API d'envoi/réception de messages

Nom de l'API

Exigences relatives aux paramètres

Description de la valeur de retour

Notes

SendMessage

Les files d'attente FIFO nécessitent un MessageGroupId.

Réponse standard.

Envoie un seul message à une file d'attente.

BatchSendMessage

Les files d'attente FIFO nécessitent un MessageGroupId.

Réponse standard.

Envoie plusieurs messages à une file d'attente par lot.

PublishMessage

Les sujets FIFO nécessitent un MessageGroupId.

Réponse standard.

Publie un message sur un sujet.

ReceiveMessage

Aucun paramètre spécial.

Le corps de la réponse inclut le MessageGroupId.

Reçoit un seul message d'une file d'attente.

BatchReceiveMessage

Prend en charge le paramètre numOfMessages.

Le corps de la réponse inclut le MessageGroupId.

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 MessageGroupId stables 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 numOfMessages pour 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.