Go: usare RabbitMQ

Go: usare RabbitMQ

RabbitMQ è un sistema di messaggistica open-source ampiamente utilizzato per implementare la comunicazione asincrona tra applicazioni. In questo articolo, esploreremo come utilizzare RabbitMQ con il linguaggio di programmazione Go per creare sistemi robusti e scalabili basati su messaggi.

Libreria AMQP per Go


go get github.com/streadway/amqp

Connessione a RabbitMQ

Iniziamo connettendoci a RabbitMQ utilizzando la libreria AMQP in Go.


package main

import (
	"fmt"
	"log"
	"github.com/streadway/amqp"
)

func main() {
	// Connessione a RabbitMQ
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	fmt.Println("Connessione a RabbitMQ stabilita con successo!")
}

Assicurati di sostituire l'URL con le credenziali corrette se hai configurato RabbitMQ con credenziali diverse da quelle di default.

Creazione di una coda

Una volta connessi a RabbitMQ, possiamo creare una coda per ricevere e inviare messaggi. Nel seguente esempio, creeremo una coda chiamata "hello".


func main() {
	// ... (connessione a RabbitMQ)

	// Creazione di un canale
	ch, err := conn.Channel()
	if err != nil {
		log.Fatal(err)
	}
	defer ch.Close()

	// Dichiarazione di una coda
	queueName := "hello"
	_, err = ch.QueueDeclare(
		queueName, // nome della coda
		false,     // durabile
		false,     // auto-eliminazione
		false,     // esclusiva
		false,     // nessuna argomentazione extra
	)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Coda %s dichiarata con successo!\n", queueName)
}

Produrre messaggi sulla coda

Ora che abbiamo una coda, possiamo produrre messaggi su di essa.


func main() {
	// ... (connessione a RabbitMQ)

	// ... (creazione di una coda)

	// Produzione di un messaggio
	message := "Ciao, mondo!"
	err = ch.Publish(
		"",         // exchange vuoto
		queueName,  // nome della coda
		false,      // mandatory
		false,      // immediate
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(message),
		},
	)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Messaggio inviato: %s\n", message)
}

Consumare messaggi dalla coda

Ora che abbiamo prodotto un messaggio sulla coda, possiamo crearne uno per consumare i messaggi.


func main() {
	// ... (connessione a RabbitMQ)

	// ... (creazione di una coda)

	// ... (produzione di un messaggio)

	// Consumo di messaggi dalla coda
	msgs, err := ch.Consume(
		queueName, // nome della coda
		"",        // consumer
		true,      // auto-acknowledge
		false,     // esclusività
		false,     // no local
		false,     // no wait
		nil,       // argomenti extra
	)
	if err != nil {
		log.Fatal(err)
	}

	// Loop per la lettura dei messaggi
	for msg := range msgs {
		fmt.Printf("Messaggio ricevuto: %s\n", msg.Body)
	}
}

Con questo esempio, abbiamo creato un semplice sistema di messaggistica utilizzando RabbitMQ e Go. Puoi adattare questo modello base per implementare scenari più complessi, come la gestione di errori, la distribuzione di carico e la scalabilità.

Ricorda sempre di gestire gli errori in modo appropriato e considera la sicurezza implementando le best practices per la gestione delle credenziali e la sicurezza della rete.

Torna su