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)
}