Golang RabbitMQ-Routenmuster
Das Routenmuster in RabbitMQ erweitert die Austausch-Routingmethode auf der Grundlage des Publish-Subscribe-Musters. Der Austauschtyp für das Routenmuster ist direkt, was auch der Standardaustausch für RabbitMQ ist. In den vorherigen Abschnitten wurde kein expliziter Austausch verwendet, aber der zugrunde liegende Austausch war tatsächlich ein direkter Austausch.
Tipp: Wenn Sie mit den Regeln des Routenmusters nicht vertraut sind, lesen Sie bitte RabbitMQ-Routenmuster.
1. Voraussetzung Tutorial
Bitte lesen Sie zuerst das Kapitel über das Golang RabbitMQ-Publish-Subscribe-Muster. Im Wesentlichen werden die verschiedenen Arbeitsmodi von RabbitMQ durch verschiedene Arten von Austauschen implementiert. Der Code ist fast gleich, der Hauptunterschied liegt in der Definition des Austauschs. Sobald das Publish-Subscribe-Muster verstanden ist, sind andere Muster recht einfach.
2. Deklaration eines direkten Austauschs
err = ch.ExchangeDeclare(
"tizi365_direct", // Austauschname, muss eindeutig sein
"direct", // Austauschtyp
true, // Haltbar
false, // Auto-gelöscht
false, // Intern
false, // Kein Warten
nil, // Argumente
)
3. Senden von Nachrichten
// Nachrichteninhalt
body := "Hallo Tizi365.com!"
// Nachricht senden
err = ch.Publish(
"tizi365_direct", // Austausch (Austauschname)
"blog", // Routing-Schlüssel, ein entscheidender Parameter, der bestimmt, an welche Warteschlange Ihre Nachricht gesendet wird
false, // Obligatorisch
false, // Sofort
amqp.Publishing {
ContentType: "text/plain", // Nachrichteninhaltstyp, in diesem Fall einfacher Text
Body: []byte(body), // Nachrichteninhalt
})
4. Empfangen von Nachrichten durch den Verbraucher
4.1. Binden des Austauschs
// Deklarieren der zu bearbeitenden Warteschlange
q, err := ch.QueueDeclare(
"", // Warteschlangenname, wenn nicht angegeben, wird eine zufällige generiert
false, // Dauerhafte Warteschlange
false, // Löschen bei Nichtbenutzung
true, // Exklusiv
false, // Kein Warten
nil, // Argumente
)
// Die Warteschlange an den angegebenen Austausch binden
err = ch.QueueBind(
q.Name, // Warteschlangenname
"blog", // Routing-Schlüssel, wenn er mit dem beim Senden einer Nachricht angegebenen Routing-Parameter übereinstimmt, wird die Nachricht an die aktuelle Warteschlange gesendet
"tizi365_direct", // Austauschname, der mit dem Austausch am Ende des Nachrichtensenders übereinstimmen muss
false,
nil)
4.2. Nachrichtenkonsumierung
// Einen Verbraucher erstellen
msgs, err := ch.Consume(
q.Name, // Verweis auf den früheren Warteschlangennamen
"", // Verbrauchername, wenn nicht ausgefüllt, wird einer zufällig generiert
true, // Automatische Bestätigung von Nachrichten, die von der Warteschlange verarbeitet wurden
false, // Exklusiv
false, // Nicht lokal
false, // Kein Warten
nil, // Argumente
)
// Schleife zum Konsumieren von Nachrichten in der Warteschlange
for d := range msgs {
log.Printf("Nachricht erhalten=%s", d.Body)
}