Cette rubrique décrit la définition, la relation de modèle, les attributs internes, les contraintes comportementales, la compatibilité des versions et les notes d'utilisation des topics dans ApsaraMQ for RocketMQ.
Définition
Dans ApsaraMQ for RocketMQ, un topic est un conteneur de premier niveau utilisé pour transmettre et stocker des messages. Un topic identifie les messages qui partagent la même logique métier.
Les topics offrent les avantages suivants :
-
Catégorisation et isolation des données
Lorsque vous concevez des solutions utilisant ApsaraMQ for RocketMQ, vous pouvez créer différents topics pour gérer les messages de différents types métier. Cette pratique garantit un stockage et des abonnements isolés.
-
Gestion des identités et des autorisations
Les messages dans ApsaraMQ for RocketMQ sont anonymes. Vous pouvez utiliser un topic pour gérer les identités et les permissions des messages d'une catégorie spécifique.
Relation de modèle
La figure suivante 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 pour toutes les ressources de messages. Toutefois, un topic est un concept logique et non le conteneur de messages réel.
Un topic se compose d'une ou plusieurs files d'attente qui gèrent le stockage des messages et la mise à l'échelle horizontale. Toutes les contraintes et les paramètres d'attribut d'un topic sont appliqués au niveau de la file d'attente.
Si un topic est de type Lite, vous pouvez créer des ressources LiteTopic sous celui-ci. Par défaut, chaque LiteTopic se compose d'une file d'attente.
Concepts
Topic
Dans ApsaraMQ for RocketMQ, un topic est un conteneur de premier niveau utilisé pour transmettre et stocker des messages. Il identifie les messages qui partagent la même logique métier et est identifié de manière unique par son nom de topic.
LiteTopic
Si un topic est de type Lite, vous pouvez créer des LiteTopics sous celui-ci. 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 se compose d'une file d'attente.
Attributs internes
Nom du topic
Files d'attente
Type de message
Délai d'expiration LiteTopic
Contraintes comportementales
Vérification forcée 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 le type d'un message envoyé par rapport au type de message défini pour le topic de destination. Si la vérification échoue, 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.
-
Type de message unique par topic
Chaque topic ne prend en charge qu'un seul type de message. Vous ne pouvez pas envoyer des messages de différents types 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 et définissez son type de message comme ordonné, mais que vous envoyez ensuite 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 et définissez son type de message comme normal. Si vous envoyez ensuite à la fois 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 forcée 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 lorsque vous utilisez ces brokers.
Notes d'utilisation
Planifiez les topics en fonction des catégories métier
Lorsque vous concevez 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. Lorsque vous déterminez la granularité du topic, tenez compte des facteurs suivants :
Cohérence du type de message : 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é, tels que les messages de transaction Taobao, vous pouvez utiliser le même topic pour les commandes de vêtements pour femmes et pour hommes. Toutefois, si le volume d'activité est important ou si les sous-modules nécessitent une catégorisation supplémentaire des types de commande, vous pouvez également diviser les messages en deux topics séparés pour les commandes de vêtements pour hommes et pour femmes.
Volume de messages : Nous vous recommandons d'utiliser des topics différents pour les messages métier qui diffèrent en magnitude ou en exigences de temporalité. Par exemple, certains messages métier ont un volume très faible mais sont hautement sensibles au temps. Si ces messages 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 division correcte des topics : Dans un scénario de commerce en ligne, vous pouvez utiliser un topic pour les messages de transaction de commande, tels que la création de commande, le paiement et l'annulation. Vous pouvez utiliser un topic séparé pour les messages liés à la logistique et un autre topic pour les messages de gestion des points.
Exemples de division incorrecte des topics :
Division avec une granularité excessivement grossière : Cela conduit à une mauvaise isolation métier et complique l'O&M indépendante et la gestion des pannes. Un exemple consiste à utiliser un seul topic pour tous les messages de transaction et de logistique.
Division avec une granularité excessivement fine : Cela consomme des ressources de topic excessives et peut surcharger le système. Un exemple consiste à créer un topic séparé pour chaque ID utilisateur.
Utilisez un seul topic pour un type de message et évitez de mélanger les types
Les topics dans ApsaraMQ for RocketMQ sont conçus pour isoler les activités. Nous vous recommandons d'utiliser des topics différents pour les messages ayant des logiques métier différentes. Les messages ayant la même logique métier ont le même type de message. Par conséquent, un seul topic ne doit être utilisé que pour un seul type de message.
Évitez d'utiliser des 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 dans un environnement de production. N'ajoutez, ne supprimez, ne modifiez et n'interrogez pas arbitrairement les topics.