Modello di instradamento RabbitMQ in Golang
Il modello di instradamento in RabbitMQ estende il metodo di instradamento dello scambio basato sul modello di pubblicazione-sottoscrizione. Il tipo di scambio per il modello di instradamento è diretto, che è anche lo scambio predefinito per RabbitMQ. Nelle sezioni precedenti, non è stato utilizzato uno scambio esplicito, ma lo scambio sottostante utilizzato era effettivamente uno scambio diretto.
Suggerimento: Se non sei familiare con le regole del modello di instradamento, leggi Modelli di instradamento RabbitMQ.
1. Tutorial Prerequisito
Si prega di leggere il capitolo su Modello di pubblicazione-sottoscrizione RabbitMQ in Golang prima. Fondamentalmente, i vari modi di lavoro di RabbitMQ sono implementati da vari tipi di scambi. Il codice è quasi lo stesso, con la principale differenza nella definizione dello scambio. Pertanto, una volta compreso il modello di pubblicazione-sottoscrizione, gli altri modelli sono piuttosto semplici.
2. Dichiarare uno Scambio Diretto
err = ch.ExchangeDeclare(
"tizi365_direct", // Nome dello scambio, deve essere unico
"direct", // Tipo di scambio
true, // Durevole
false, // Auto-cancellato
false, // Interno
false, // No-wait
nil, // Argomenti
)
3. Inviare Messaggi
// Contenuto del messaggio
body := "Ciao Tizi365.com!"
// Invio del messaggio
err = ch.Publish(
"tizi365_direct", // Scambio (nome dello scambio)
"blog", // Chiave di instradamento, un parametro cruciale che determina a quale coda verrà inviato il tuo messaggio
false, // Obbligatorio
false, // Immediato
amqp.Publishing {
ContentType: "text/plain", // Tipo di contenuto del messaggio, in questo caso, testo semplice
Body: []byte(body), // Contenuto del messaggio
})
4. Ricezione dei Messaggi da Parte del Consumatore
4.1. Associazione dello Scambio
// Dichiarazione della coda su cui operare
q, err := ch.QueueDeclare(
"", // Nome della coda, se non specificato, ne verrà generato uno casuale
false, // Coda durevole
false, // Eliminare quando inutilizzata
true, // Esclusiva
false, // No-wait
nil, // Argomenti
)
// Associazione della coda allo scambio specificato
err = ch.QueueBind(
q.Name, // Nome della coda
"blog", // Chiave di instradamento, se corrisponde al parametro di instradamento specificato durante l'invio di un messaggio, il messaggio viene consegnato alla coda corrente
"tizi365_direct", // Nome dello scambio, che deve essere coerente con lo scambio definito sul lato del mittente del messaggio
false,
nil)
4.2. Consumare Messaggi
// Creazione di un consumatore
msgs, err := ch.Consume(
q.Name, // Riferimento al nome della coda precedente
"", // Nome del consumatore, se non compilato, ne verrà generato uno casuale
true, // Riconoscimento automatico dei messaggi elaborati dalla coda
false, // Esclusivo
false, // No-local
false, // No-wait
nil, // Argomenti
)
// Ciclo per consumare i messaggi nella coda
for d := range msgs {
log.Printf("Messaggio ricevuto=%s", d.Body)
}