Cette rubrique présente la définition, les relations au sein du modèle, les attributs internes, les contraintes comportementales, la compatibilité des versions et les recommandations d'utilisation des topics dans ApsaraMQ for RocketMQ.
Définition
Dans ApsaraMQ for RocketMQ, un topic est un conteneur de premier niveau destiné à la transmission et au stockage des messages. Il identifie les messages partageant la même logique métier.
Les topics offrent les avantages suivants :
-
Catégorisation et isolation des données
Lors de la conception de solutions avec ApsaraMQ for RocketMQ, créez des topics distincts pour gérer les messages selon leur type métier. Cette approche garantit l'isolation du stockage et des abonnements.
-
Gestion des identités et des autorisations
Les messages dans ApsaraMQ for RocketMQ sont anonymes. Utilisez un topic pour gérer les identités et les autorisations associées à une catégorie spécifique de messages.
Relations au sein du modèle
Le schéma suivant illustre la position d'un topic dans le modèle de domaine de ApsaraMQ for RocketMQ.

Dans ApsaraMQ for RocketMQ, un topic est un conteneur de premier niveau regroupant toutes les ressources de messagerie. Toutefois, il s'agit d'un concept logique et non du conteneur de messages physique.
Un topic comprend une ou plusieurs files d'attente qui assurent le stockage des messages et la mise à l'échelle horizontale. Toutes les contraintes et configurations d'attributs d'un topic s'appliquent au niveau de la file d'attente.
Si un topic est de type Lite, vous pouvez y créer des ressources LiteTopic. Par défaut, chaque LiteTopic comprend une seule file d'attente.
Concepts
Topic
Dans ApsaraMQ for RocketMQ, un topic est un conteneur de premier niveau destiné à la transmission et au stockage des messages. Il identifie les messages partageant la même logique métier et se distingue par son nom unique.
LiteTopic
Si un topic est de type Lite, vous pouvez y créer des LiteTopics. La combinaison du topic et du LiteTopic identifie de manière unique le conteneur de stockage des messages. Par défaut, chaque conteneur de stockage comprend une seule file d'attente.
Attributs internes
Nom du topic
Files d'attente
Type de message
Délai d'expiration LiteTopic
Contraintes comportementales
Vérification stricte du type de message
Dans ApsaraMQ for RocketMQ 5.x, les types de messages sont gérés et traités indépendamment au sein des topics. Le système vérifie la concordance entre le type du message envoyé et le type défini pour le topic de destination. En cas d'échec, la demande d'envoi est rejetée et le système renvoie une exception d'incompatibilité de type. Les règles de vérification suivantes s'appliquent :
-
Cohérence du type de message
Le type du message envoyé doit correspondre au type de message défini pour le topic de destination.
-
Un seul type de message par topic
Chaque topic ne prend en charge qu'un seul type de message. Vous ne pouvez pas envoyer des messages de types différents vers le même topic.
Scénarios d'utilisation incorrecte courants
-
Envoi de messages d'un type incompatible
Par exemple, si vous créez un topic avec le type de message « ordonné », puis envoyez un message transactionnel vers ce topic, la demande d'envoi est rejetée et une exception d'incompatibilité de type est renvoyée.
-
Mélange de types de messages dans un seul topic
Par exemple, vous créez un topic avec le type de message « normal ». Si vous envoyez ensuite des messages normaux et des messages ordonnés vers ce topic, les demandes d'envoi des messages ordonnés sont rejetées et une exception d'incompatibilité de type est renvoyée.
Compatibilité des versions
La vérification stricte du type de message s'applique uniquement aux brokers ApsaraMQ for RocketMQ 5.x.
Les brokers ApsaraMQ for RocketMQ 4.x n'appliquent pas la vérification du type de message. Toutefois, nous vous recommandons de maintenir la cohérence du type de message lors de l'utilisation de ces brokers.
Recommandations d'utilisation
Planifiez les topics selon les catégories métier
Lors de la conception des topics dans ApsaraMQ for RocketMQ, nous vous recommandons de regrouper les messages par catégorie métier principale. Regroupez les messages ayant les mêmes attributs fonctionnels au sein du même domaine métier dans un seul topic. Pour déterminer la granularité des topics, tenez compte des facteurs suivants :
Cohérence du type de message : Les différents types de messages, tels que les messages ordonnés et les messages normaux, nécessitent des topics distincts.
Pertinence métier : Si les activités ne sont pas directement liées, utilisez des topics différents. Par exemple, les messages de transaction Taobao et les messages logistiques Freshippo n'ont aucun chevauchement métier et nécessitent des topics distincts. Pour les messages au sein d'une même activité, comme les transactions Taobao, vous pouvez utiliser le même topic pour les commandes de vêtements féminins et masculins. Toutefois, si le volume d'activité est important ou si les sous-modules exigent une catégorisation supplémentaire des types de commande, vous pouvez répartir les messages dans deux topics distincts pour les commandes de vêtements féminins et masculins.
Volume de messages : Nous vous recommandons d'utiliser des topics différents pour les messages métier dont le volume ou les exigences de rapidité diffèrent. Par exemple, certains messages métier ont un volume très faible mais sont très sensibles au temps. S'ils partagent un topic avec une activité générant un volume élevé de messages, le temps d'attente pour les messages sensibles au temps augmente.
Exemple de segmentation correcte des topics : Dans un scénario d'achat en ligne, utilisez un topic pour les messages de transaction de commande (création, paiement, annulation). Utilisez un topic distinct pour les messages liés à la logistique et un autre pour la gestion des points.
Exemples de segmentation incorrecte des topics :
Granularité excessivement grossière : Cela entraîne une mauvaise isolation métier et complique la maintenance et la gestion des pannes. Exemple : utiliser un seul topic pour tous les messages de transaction et de logistique.
Granularité excessivement fine : Cela consomme trop de ressources de topic et peut surcharger le système. Exemple : créer un topic séparé pour chaque ID utilisateur.
Utilisez un seul topic par type de message et évitez les mélanges
Les topics dans ApsaraMQ for RocketMQ sont conçus pour isoler les activités métier. Nous vous recommandons d'utiliser des topics différents pour les messages ayant des logiques métier différentes. Les messages partageant la même logique métier ont le même type de message. Par conséquent, un topic ne doit être utilisé que pour un seul type de message.
Évitez les mécanismes automatisés pour la gestion des topics
Dans l'architecture ApsaraMQ for RocketMQ, les topics sont des ressources et des conteneurs de premier niveau. Ils disposent de capacités indépendantes pour la gestion des autorisations, la collecte de métriques d'observabilité et la surveillance. La création et la gestion des topics consomment des ressources système. Par conséquent, vous devez gérer strictement les ressources de topic en environnement de production. N'ajoutez, ne supprimez, ne modifiez et n'interrogez pas les topics de manière arbitraire.