Motif de routage de Golang RabbitMQ
Le motif de routage dans RabbitMQ étend la méthode de routage des échanges sur la base du modèle de publication-abonnement. Le type d'échange pour le motif de routage est direct, qui est également l'échange par défaut pour RabbitMQ. Dans les sections précédentes, un échange explicite n'a pas été utilisé, mais l'échange sous-jacent utilisé était en fait un échange direct.
Astuce : Si vous ne connaissez pas les règles du motif de routage, veuillez lire Modèles de routage RabbitMQ.
1. Tutoriel préalable
Veuillez d'abord lire le chapitre sur le Modèle de publication-abonnement de Golang RabbitMQ. Fondamentalement, les différents modes de fonctionnement de RabbitMQ sont implémentés par différents types d'échanges. Le code est presque le même, la principale différence étant la définition de l'échange. Par conséquent, une fois que le modèle de publication-abonnement est compris, les autres modèles sont assez simples.
2. Déclaration d'un échange direct
err = ch.ExchangeDeclare(
"tizi365_direct", // Nom de l'échange, doit être unique
"direct", // 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_direct", // Échange (nom de l'échange)
"blog", // Clé de routage, un paramètre crucial qui détermine dans quelle file votre message sera envoyé
false, // Obligatoire
false, // Immédiat
amqp.Publishing {
ContentType: "text/plain", // Type de contenu du message, dans ce cas, texte brut
Body: []byte(body), // Contenu du message
})
4. Réception de messages par le consommateur
4.1. Liaison de l'échange
// Déclarer la file sur laquelle opérer
q, err := ch.QueueDeclare(
"", // Nom de la file, si non spécifié, un nom aléatoire sera généré
false, // File durable
false, // Suppression en cas de non-utilisation
true, // Exclusivité
false, // Pas d'attente
nil, // Arguments
)
// Lier la file à l'échange spécifié
err = ch.QueueBind(
q.Name, // Nom de la file
"blog", // Clé de routage, si elle correspond au paramètre de routage spécifié lors de l'envoi d'un message, le message est livré à la file actuelle
"tizi365_direct", // Nom de l'échange, qui doit être identique à l'échange défini au niveau de l'envoi du message
false,
nil)
4.2. Consommation des messages
// Créer un consommateur
msgs, err := ch.Consume(
q.Name, // Référence au nom de la file précédente
"", // Nom du consommateur, si non rempli, un nom aléatoire sera généré
true, // Accuser réception automatiquement des messages traités par la file
false, // Exclusif
false, // Pas de local
false, // Pas d'attente
nil, // Arguments
)
// Boucler pour consommer les messages dans la file
for d := range msgs {
log.Printf("Message reçu=%s", d.Body)
}