Le mode de sujet RabbitMQ Golang est similaire au mode de routage (Direct), la plus grande différence étant que les paramètres de routage dans le mode de sujet prennent en charge la correspondance floue. Le type d'échange pour le mode de sujet est 'topic'.
L'architecture du mode de sujet est la suivante:
Remarque : Si vous n'êtes pas familier avec le mode de sujet RabbitMQ, veuillez d'abord lire la section sur le mode de sujet RabbitMQ.
1. Tutoriel préalable
Veuillez lire les sections suivantes dans l'ordre :
- Section Concepts de base de RabbitMQ
- Section Mode de sujet RabbitMQ
- Section Implémentation du modèle de publication/abonnement Golang RabbitMQ
Remarque : Étant donné que la section Golang RabbitMQ publication/abonnement contient déjà des exemples de code complets, seules la définition de l'échange et les paramètres de routage sont différents pour les autres modes RabbitMQ. Par conséquent, seule la partie clé du code est affichée.
2. Déclaration de l'échange de sujet
err = ch.ExchangeDeclare(
"tizi365_topic", // Nom de l'échange, doit être unique
"topic", // Type d'échange
true, // Durable
false, // Auto-supprimé
false, // Interne
false, // Pas d'attente
nil, // Arguments
)
3. Envoi de messages
// Contenu du message
body := "Bonjour Tizi365.com!"
// Envoyer le message
err = ch.Publish(
"tizi365_topic", // Nom de l'échange
"www.tizi365.com", // Paramètre de routage, paramètre crucial déterminant à quelle file votre message sera envoyé
false, // Obligatoire
false, // Immédiat
amqp.Publishing {
ContentType: "text/plain", // Type de contenu du message, ici c'est du texte brut
Body: []byte(body), // Contenu du message
})
4. Consommation de messages
4.1. Liaison d'échanges
// Déclare la file à utiliser
q, err := ch.QueueDeclare(
"", // Nom de la file, sera généré aléatoirement si non rempli
false, // File durable
false, // Supprimer lorsqu'inutilisée
true, // Exclusif
false, // Pas d'attente
nil, // Arguments
)
// Lie la file à l'échange spécifié
err = ch.QueueBind(
q.Name, // Nom de la file
"*.tizi365.com", // Paramètre de routage, paramètre crucial, utilisant le joker * pour faire correspondre un mot, s'il utilise #, il peut faire correspondre plusieurs mots
"tizi365_topic", // Nom de l'échange, doit correspondre à l'échange défini par l'expéditeur du message
false,
nil)
4.2. Traitement des messages
// Créer un consommateur
msgs, err := ch.Consume(
q.Name, // Référence au nom de la file ci-dessus
"", // Nom du consommateur, généré automatiquement s'il n'est pas rempli
true, // Accusé de réception automatique à la file que le message a été traité
false, // Exclusif
false, // Pas de local
false, // Pas d'attente
nil, // Args
)
// Parcourir la consommation des messages dans la file
for d := range msgs {
log.Printf("Message reçu=%s", d.Body)
}