Golang RabbitMQ: Reka bentuk dan pelaksanaan untuk mencapai penghantaran mesej yang boleh dipercayai
Pengenalan:
Dalam sistem edaran moden, penyampaian mesej adalah a corak komunikasi biasa. RabbitMQ ialah perisian tengah pemesejan sumber terbuka yang popular yang digunakan secara meluas dalam pelbagai sistem teragih. Artikel ini akan memperkenalkan cara menggunakan Golang dan RabbitMQ untuk mereka bentuk dan melaksanakan pemesejan yang boleh dipercayai. Kami akan menyelami pelbagai aspek pelaksanaan dan menyediakan contoh kod konkrit.
1. Pengenalan kepada RabbitMQ
RabbitMQ ialah perisian tengah pemesejan merentas platform berprestasi tinggi. Ia melaksanakan protokol AMQP (Advanced Message Qeuing Protocol) dan menyediakan fungsi penghantaran mesej dan baris gilir mesej yang boleh dipercayai. RabbitMQ adalah berdasarkan protokol komersil MQ (Baris Gilir Mesej. Ciri utamanya termasuk penghantaran mesej yang boleh dipercayai, sokongan untuk kegigihan mesej, pengedaran mesej, pengimbangan beban, dsb.
2. Integrasi Golang dan RabbitMQ
Sebagai bahasa pengaturcaraan yang cekap dan ringkas, Golang secara beransur-ansur digemari oleh pembangun. Di Golang, kami boleh menggunakan perpustakaan pihak ketiga github.com/streadway/amqp untuk mencapai penyepaduan dengan RabbitMQ. Pustaka ini menyediakan beberapa antara muka yang ringkas dan mudah digunakan untuk memudahkan kami menghantar dan menerima mesej.
3 Langkah untuk mereka bentuk sistem pemesejan yang boleh dipercayai
Menyambung perkhidmatan RabbitMQ
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatal(err) } defer conn.Close()
channel, err := conn.Channel() if err != nil { log.Fatal(err) } defer channel.Close()
queue, err := channel.QueueDeclare( "my_queue", //队列名称 true, //是否持久化 false, //是否自动删除 false, //是否具有排他性 false, //是否阻塞 nil, //其他参数 ) if err != nil { log.Fatal(err) }
🎜🎜#
Baris gilir pengisytiharanerr = channel.Publish( "", // exchange名称 queue.Name, // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte("Hello, RabbitMQ!"), }) if err != nil { log.Fatal(err) }
🎜🎜🎜#🎜 🎜🎜#
msgs, err := channel.Consume( queue.Name, // queue名称 "", // 消费者名称 true, //自动应答 false, //是否排他性 false, // 无等待 false, // 不限制数量 nil, //其他参数 ) if err != nil { log.Fatal(err) } for msg := range msgs { log.Printf("Received a message: %s", msg.Body) }
Melalui langkah di atas, kita boleh mencapai penghantaran dan penerimaan mesej yang mudah. Tetapi dalam aplikasi praktikal, kita perlu mempertimbangkan isu seperti penghantaran mesej yang boleh dipercayai dan kegigihan baris gilir mesej.
Mekanisme pengesahan penghantaran
err = channel.Publish( "", // exchange名称 queue.Name, // routing key true, // mandatory false, // immediate amqp.Publishing{ DeliveryMode: amqp.Persistent, // 持久化方式 ContentType: "text/plain", Body: []byte("Hello, RabbitMQ!"), }) if err != nil { log.Fatal(err) }
Mekanisme pengesahan penggunaan
channel.NotifyPublish(confirmChan) err = channel.Publish("", queue.Name, true, false, message) if err != nil { log.Fatal(err) } conf := <-confirmChan if !conf.Ack { log.Printf("Fail to send message: %s", message.Body) }
Artikel ini memperkenalkan cara menggunakan Golang dan RabbitMQ untuk melaksanakan sistem pemesejan yang boleh dipercayai. Dengan menggabungkan ciri hebat RabbitMQ dan Golang, kami boleh membina sistem pengedaran yang cekap dan boleh dipercayai. Saya berharap kandungan artikel ini dapat membantu pembaca dalam aplikasi mereka dalam projek sebenar.
https://www.rabbitmq.com/
https://github.com/streadway / amqp
Atas ialah kandungan terperinci Golang RabbitMQ: Reka bentuk dan pelaksanaan pemesejan yang boleh dipercayai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!