Der Golang RabbitMQ-Thema-Modus ist ähnlich wie der Routing-Modus (Direct), wobei der größte Unterschied darin besteht, dass die Routing-Parameter im Thema-Modus auch unscharfe Übereinstimmungen unterstützen. Der Austauschtyp für den Thema-Modus ist 'topic'.
Die Architektur des Thema-Modus sieht wie folgt aus:
Hinweis: Falls Sie mit dem RabbitMQ-Thema-Modus nicht vertraut sind, lesen Sie bitte zuerst den Abschnitt RabbitMQ-Thema-Modus.
1. Voraussetzung Tutorial
Bitte lesen Sie die folgenden Abschnitte in folgender Reihenfolge:
- Abschnitt Grundkonzepte von RabbitMQ
- Abschnitt RabbitMQ-Thema-Modus
- Abschnitt Implementierung des Golang RabbitMQ-Publish/Subscribe-Musters
Hinweis: Da der Abschnitt Golang RabbitMQ Publish/Subscribe bereits vollständige Codebeispiele enthält, sind nur der Exchange-Definition und die Routing-Parameter für andere RabbitMQ-Modi unterschiedlich. Daher wird nur der relevante Code gezeigt.
2. Thema-Austausch deklarieren
err = ch.ExchangeDeclare(
"tizi365_topic", // Austauschname, muss eindeutig sein
"topic", // Austauschtyp
true, // Haltbar
false, // Auto-gelöscht
false, // Intern
false, // Kein Warten
nil, // Argumente
)
3. Nachrichten senden
// Nachrichteninhalt
body := "Hallo Tizi365.com!"
// Nachricht veröffentlichen
err = ch.Publish(
"tizi365_topic", // Austauschname
"www.tizi365.com", // Routing-Parameter, entscheidender Parameter, der bestimmt, in welche Warteschlange Ihre Nachricht gesendet wird
false, // Obligatorisch
false, // Sofort
amqp.Publishing {
ContentType: "text/plain", // Nachrichteninhaltstyp, hier ist es einfacher Text
Body: []byte(body), // Nachrichteninhalt
})
4. Nachrichten empfangen
4.1. Binden des Austauschs
// Die zu bearbeitende Warteschlange deklarieren
q, err := ch.QueueDeclare(
"", // Warteschlangenname, wird zufällig generiert, wenn nicht ausgefüllt
false, // Dauerhafte Warteschlange
false, // Löschen, wenn nicht verwendet
true, // Exklusiv
false, // Kein Warten
nil, // Argumente
)
// Die Warteschlange mit dem angegebenen Austausch verbinden
err = ch.QueueBind(
q.Name, // Warteschlangenname
"*.tizi365.com", // Routing-Parameter, entscheidender Parameter, dabei wird das Platzhalterzeichen * verwendet, um ein Wort abzugleichen; wird # verwendet, können mehrere Wörter abgeglichen werden
"tizi365_topic", // Austauschname, muss mit dem Austausch übereinstimmen, den der Nachrichtenabsender definiert hat
false,
nil)
4.2. Behandeln von Nachrichten
// Einen Verbraucher erstellen
msgs, err := ch.Consume(
q.Name, // Verweis auf den Warteschlangennamen oben
"", // Verbrauchername, automatisch generiert, wenn nicht ausgefüllt
true, // Automatische Bestätigung an die Warteschlange, dass die Nachricht behandelt wurde
false, // Exklusiv
false, // Nicht lokal
false, // Kein Warten
nil, // Argumente
)
// Durch das Konsumieren von Nachrichten in der Warteschlange iterieren
for d := range msgs {
log.Printf("Nachricht erhalten=%s", d.Body)
}