ApsaraMQ for RocketMQ distribue les messages aux consommateurs selon l'un des deux modes suivants : la consommation en cluster (chaque message est remis à un seul consommateur du groupe) ou la consommation par diffusion (chaque message est remis à tous les consommateurs du groupe). Le mode par défaut est la consommation en cluster.
Choisir un mode de consommation
Plusieurs consommateurs identifiés par le même ID de groupe constituent un groupe de consommateurs. Les consommateurs d'un même groupe doivent utiliser la même logique de consommation, s'abonner aux mêmes topics et tags, et recourir au même mode de consommation. Pour plus d'informations, consultez la rubrique Cohérence des abonnements.
Sélectionnez le mode qui correspond à la manière dont les consommateurs d'un groupe doivent recevoir les messages :
| Objectif | Mode | Fonctionnement |
|---|---|---|
| Répartir les messages entre plusieurs consommateurs pour un traitement parallèle | Consommation en cluster | Chaque message est remis à un seul consommateur du groupe. Les consommateurs se partagent la charge de travail. |
| Remettre chaque message à tous les consommateurs | Consommation par diffusion | Chaque message est remis à tous les consommateurs du groupe. Chaque consommateur traite l'intégralité du flux de messages. |
Si vous ne définissez pas explicitement un mode de consommation, la consommation en cluster est utilisée par défaut.
Consommation en cluster
En mode de consommation en cluster, ApsaraMQ for RocketMQ répartit les messages d'un topic entre les consommateurs d'un groupe. Un seul consommateur traite chaque message.

Cas d'utilisation
Équilibrage de charge pour un traitement à haut débit : répartissez un grand volume de messages sur plusieurs consommateurs afin que chacun traite un sous-ensemble. L'ajout de consommateurs augmente le débit.
Traitement distribué des données : partitionnez le travail entre plusieurs nœuds afin que chaque nœud traite indépendamment une partie des données.
Notes d'utilisation
Un message ayant échoué n'est pas nécessairement redistribué au même consommateur. Après un rééquilibrage, le message peut être attribué à un autre consommateur du groupe.
La progression de la consommation (offsets) est stockée sur les brokers ApsaraMQ for RocketMQ. Si un consommateur redémarre, il reprend la lecture depuis le dernier offset validé, ce qui évite toute perte de message.
La nouvelle tentative de distribution des messages est prise en charge. Si un consommateur ne parvient pas à traiter un message, le broker le redistribue automatiquement. Pour plus de détails, consultez la rubrique Nouvelle tentative de distribution des messages.
Consommation par diffusion
En mode de consommation par diffusion, ApsaraMQ for RocketMQ remet chaque message à tous les consommateurs du groupe. Chaque consommateur traite chaque message au moins une fois. Ce mode convient aux scénarios dans lesquels plusieurs consommateurs traitent simultanément le même groupe de messages, comme le traitement des commandes.

Cas d'utilisation
Notifications et annonces : diffusez une mise à jour à tous les abonnés afin que chaque consommateur puisse agir en conséquence.
Synchronisation des données en temps réel : propagez les modifications de données à tous les nœuds d'un système distribué pour garantir la cohérence des caches locaux ou de l'état.
Notes d'utilisation
Absence de nouvelle tentative automatique : le broker ne redistribue pas les messages qu'un consommateur ne parvient pas à traiter. Gérez les échecs de consommation directement dans la logique de votre application.
Comportement lors du redémarrage : lorsqu'un consommateur redémarre, il commence à consommer les messages à partir du dernier message publié. Les messages publiés pendant que le consommateur était hors ligne sont ignorés.
Consommation accrue des ressources : chaque consommateur traitant chaque message, la consommation des ressources est multipliée. Privilégiez la consommation en cluster sauf si votre cas d'utilisation requiert spécifiquement une distribution de type fan-out.
Comparaison des fonctionnalités
La consommation par diffusion sacrifie certaines fonctionnalités avancées au profit d'une distribution de type fan-out. Le tableau suivant indique les fonctionnalités prises en charge par chaque mode.
| Fonctionnalité | Consommation en cluster | Consommation par diffusion |
|---|---|---|
| SDK clients TCP | Prise en charge | Prise en charge |
| SDK clients HTTP | Prise en charge | Non pris en charge |
| Messages ordonnés | Prise en charge | Non pris en charge |
| Réinitialisation de l'offset du consommateur | Prise en charge | Non pris en charge |
| Nouvelle tentative de distribution des messages | Prise en charge | Non pris en charge |
| Requête et alertes concernant les messages accumulés | Prise en charge | Non pris en charge |
| Requête d'abonnement | Prise en charge | Non pris en charge |
En mode de consommation par diffusion, le broker ne tente pas de redistribuer les messages ayant échoué, ne suit pas la progression de la consommation et ne prend pas en charge la réinitialisation des offsets. Concevez votre consommateur de manière à gérer ces aspects au niveau de l'application.
Suivi de la progression du consommateur
Le suivi de la progression du consommateur diffère selon les deux modes :
| Aspect | Consommation en cluster | Consommation par diffusion |
|---|---|---|
| Stocké sur | Broker ApsaraMQ for RocketMQ | Client |
| Après redémarrage | Reprend depuis le dernier offset validé | Commence à partir du dernier message |
| Fiabilité | Plus élevée – les offsets gérés par le broker survivent aux pannes du client | Plus faible – les offsets gérés par le client sont perdus lors du redémarrage ; la probabilité d'une consommation répétée est plus élevée |
| Nouvelle tentative de distribution des messages | Le broker redistribue automatiquement les messages ayant échoué | Aucune nouvelle tentative automatique ; gérez les échecs dans votre code |
Configurer le mode de consommation
Définissez le paramètre MessageModel dans le code SDK de votre consommateur. Si vous ne définissez pas ce paramètre, la consommation en cluster est utilisée par défaut.
SDK clients TCP
Tous les exemples de SDK clients TCP définissent la propriété MessageModel dans la configuration du consommateur.
Java
-
Consommation en cluster
// Clustering consumption is the default. This explicit setting is optional. properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING); -
Consommation par diffusion
properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
C/C++
-
Consommation en cluster
// Clustering consumption is the default. This explicit setting is optional. factoryInfo.setFactoryProperty(ONSFactoryProperty::MessageModel, ONSFactoryProperty::CLUSTERING); -
Consommation par diffusion
factoryInfo.setFactoryProperty(ONSFactoryProperty::MessageModel, ONSFactoryProperty::BROADCASTING);
.NET
-
Consommation en cluster
// Clustering consumption is the default. This explicit setting is optional. factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.CLUSTERING); -
Consommation par diffusion
factoryInfo.setFactoryProperty(ONSFactoryProperty.MessageModel, ONSFactoryProperty.BROADCASTING);
SDK clients HTTP
Les SDK clients HTTP prennent uniquement en charge la consommation en cluster. Aucune configuration n'est nécessaire.
FAQ
Pourquoi la consommation par diffusion ne prend-elle pas effet après sa configuration ?
Ce problème survient lorsque le type de message ou le SDK ne prend pas en charge la consommation par diffusion :
Messages ordonnés : les messages ordonnés prennent uniquement en charge la consommation en cluster. Le paramètre
MessageModelest ignoré.SDK client HTTP : les clients HTTP prennent uniquement en charge la consommation en cluster. Pour utiliser la consommation par diffusion, basculez vers un SDK client TCP.
Puis-je mélanger les modes de consommation au sein d'un même groupe ?
Non. Tous les consommateurs d'un groupe doivent utiliser le même mode de consommation.
Si les consommateurs d'un même groupe ont des paramètres MessageModel différents, la consommation par diffusion s'applique à tous les consommateurs du groupe. Par exemple, dans un groupe de cinq consommateurs où deux sont configurés sur CLUSTERING et trois sur BROADCASTING, les cinq utilisent la consommation par diffusion.
Étapes suivantes
Cohérence des abonnements : règles permettant de maintenir la cohérence des configurations d'abonnement entre les consommateurs d'un groupe.
Nouvelle tentative de distribution des messages : gestion par le broker des échecs de distribution des messages en mode de consommation en cluster.
Exemples de code : exemples complets de messagerie pour ApsaraMQ for RocketMQ.