Golang RabbitMQ: Untuk mencapai reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia, contoh kod khusus diperlukan
Pengenalan:
Dengan perkembangan berterusan teknologi Internet dan rangkaian aplikasi yang luas, baris gilir mesej telah menjadi bahagian yang amat diperlukan dalam sistem perisian moden Bahagian yang hilang. Sebagai alat untuk mencapai penyahgandingan, komunikasi tak segerak, pemprosesan toleransi kesalahan dan fungsi lain, baris gilir mesej menyediakan ketersediaan tinggi dan sokongan berskala untuk sistem teragih. Sebagai bahasa pengaturcaraan yang cekap dan ringkas, Golang digunakan secara meluas untuk membina sistem berkonkurensi tinggi dan berprestasi tinggi Gabungannya dengan RabbitMQ boleh memberikan kami penyelesaian baris gilir mesej yang berkuasa.
1. Reka bentuk seni bina:
Apabila membina sistem baris gilir mesej yang tersedia, faktor utama berikut mesti diambil kira:
Berdasarkan faktor di atas, reka bentuk seni bina sistem baris gilir mesej yang sangat tersedia seperti berikut:
Consumer A Consumer B Consumer C +---------+ +---------+ +---------+ | App | ----------> | App | ----------> | App | /+---------+ +---------+ +---------+ / / / +----+ +------+ +------+ | P1 | <----> | Node | <----> | Node | +----+ +------+ +------+ | P2 | <----> | Node | <----> | Node | +----+ +------+ +------+ | P3 | <----> | Node | <----> | Node | +----+ +------+ +------+
Antaranya, P1, P2, P3 ialah pengeluar, Pengguna A, Pengguna B dan Pengguna Bagi pengguna, App ialah aplikasi perniagaan.
Node ialah nod kluster RabbitMQ yang melaksanakan replikasi mesej dan ketersediaan tinggi melalui baris gilir cermin.
(1) Pasang RabbitMQ:
Sistem baris gilir mesej yang ditulis dalam Golang perlu memasang RabbitMQ terlebih dahulu. Untuk langkah pemasangan khusus, sila rujuk dokumentasi rasmi RabbitMQ.
(2) Buat pengeluar:
package main import ( "fmt" "log" "github.com/streadway/amqp" ) func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } } func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() failOnError(err, "Failed to open a channel") defer ch.Close() q, err := ch.QueueDeclare( "hello", // 队列名 false, // 是否持久化 false, // 是否自动删除 when unused false, // 是否独占连接 false, // 是否阻塞等待 nil, // 额外的属性 ) failOnError(err, "Failed to declare a queue") body := "Hello RabbitMQ!" err = ch.Publish( "", // exchange q.Name, // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), }) failOnError(err, "Failed to publish a message") log.Printf(" [x] Sent %s", body) }
(3) Buat pengguna:
package main import ( "fmt" "log" "os" "os/signal" "syscall" "github.com/streadway/amqp" ) func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } } func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() failOnError(err, "Failed to open a channel") defer ch.Close() q, err := ch.QueueDeclare( "hello", // 队列名 false, // 是否持久化 false, // 是否自动删除 when unused false, // 是否独占连接 false, // 是否阻塞等待 nil, // 额外的属性 ) failOnError(err, "Failed to declare a queue") msgs, err := ch.Consume( q.Name, // 队列名 "", // consumer true, // 自动应答 false, // 独占连接 false, // 阻塞等待时是否自动取消 false, // 额外属性 nil, ) failOnError(err, "Failed to register a consumer") forever := make(chan bool) go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) } }() log.Println(" [*] Waiting for messages. To exit press CTRL+C") // Handle SIGINT and SIGTERM. sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) <-sigchan <-forever }
(4) Jalankan kod di atas untuk melaksanakan sistem baris gilir mesej yang sangat tersedia berdasarkan Golang dan RabbitMQ.
Kesimpulan:
Dengan menggabungkan Golang dan RabbitMQ, kami boleh melaksanakan sistem baris gilir mesej yang sangat tersedia. Program pengeluar dan pengguna yang ditulis dalam Golang boleh mencapai komunikasi tak segerak, penyahgandingan dan mengurangkan kebergantungan antara sistem melalui RabbitMQ. Melalui reka bentuk seni bina yang munasabah dan contoh kod pelaksanaan, kami boleh membina sistem baris gilir mesej dengan cekap, prestasi dan kebolehskalaan yang tinggi, memberikan sokongan penting untuk pembinaan dan aplikasi sistem teragih.
Atas ialah kandungan terperinci Golang RabbitMQ: Reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!