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: RabbitMQ Thema-Modus

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:

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