Rumah > Artikel > pembangunan bahagian belakang > Bina sistem baris gilir mesej yang sangat tersedia menggunakan bahasa Go
Dengan seni bina IT moden, komunikasi dan penyelarasan antara pelbagai komponen menjadi semakin penting. Sistem baris gilir mesej telah menjadi salah satu kemudahan penting apabila aplikasi perlu menghantar mesej kepada aplikasi atau pemproses lain. Go ialah bahasa pengaturcaraan yang semakin popular, dan prestasi cekap serta sifat keselarasannya menjadikannya alat yang ideal untuk membangunkan sistem baris gilir mesej yang tersedia.
Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk membina sistem baris gilir mesej yang sangat tersedia, dan membincangkan amalan terbaik untuk mencapai ketersediaan tinggi.
Pengenalan kepada Sistem Gilir Mesej
Sebelum menulis sistem baris gilir mesej yang sangat tersedia, anda perlu terlebih dahulu memahami apa itu sistem baris gilir mesej. Sistem baris gilir mesej biasanya terdiri daripada komponen berikut:
Dalam sistem baris gilir mesej, pengeluar menghantar mesej kepada pertukaran, yang kemudiannya mengarahkan mesej ke satu atau lebih baris gilir, membolehkan pengguna menarik keluar dari baris gilir Menghantar mesej dan memprosesnya. Dalam aplikasi dunia sebenar, sistem baris gilir mesej boleh digunakan untuk komunikasi dan penyelarasan merentas aplikasi atau merentas perkhidmatan.
Gunakan bahasa Go untuk melaksanakan sistem baris gilir mesej
Yang berikut akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan sistem baris gilir mesej asas.
Mula-mula buat dua program Go: producer.go dan consumer.go. Program producer.go menghantar mesej ke baris gilir mesej, dan program consumer.go menggunakan mesej ini.
Dalam producer.go, anda perlu mengimport beberapa pakej yang diperlukan terlebih dahulu:
import ( "log" "github.com/streadway/amqp" )
Kemudian, buat sambungan ke pelayan RabbitMQ:
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") defer conn.Close() if err != nil { log.Fatal(err) }
Seterusnya, buat saluran dan Isytihar pertukaran:
ch, err := conn.Channel() defer ch.Close() err = ch.ExchangeDeclare( "my-exchange", // exchange name "fanout", // exchange type true, // durable false, // auto-deleted false, // internal false, // no-wait nil, // arguments ) if err != nil { log.Fatal(err) }
Akhir sekali, terbitkan mesej ke bursa:
for i := 1; i <= 10; i++ { message := fmt.Sprintf("Message %d", i) err = ch.Publish( "my-exchange", // exchange "", // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(message), }) if err != nil { log.Fatal(err) } log.Printf("Sent message: %s", message) }
Dalam consumer.go, wujudkan sambungan ke pelayan RabbitMQ:
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") defer conn.Close() if err != nil { log.Fatal(err) }
Kemudian, buat saluran dan mengisytiharkan baris gilir:
ch, err := conn.Channel() defer ch.Close() q, err := ch.QueueDeclare( "my-queue", // queue name true, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) if err != nil { log.Fatal(err) }
Akhir sekali, tarik mesej daripada baris gilir:
msgs, err := ch.Consume( q.Name, // queue name "", // consumer name true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // arguments ) if err != nil { log.Fatal(err) } for d := range msgs { log.Printf("Received message: %s", d.Body) }
Ini ialah sistem baris gilir mesej asas, tetapi ia tidak begitu tersedia.
Mencapai Ketersediaan Tinggi
Sekarang kami memahami cara membina sistem baris gilir mesej asas, kami akan meneroka amalan terbaik untuk mencapai ketersediaan tinggi.
Pertama, untuk mencapai ketersediaan tinggi, kami perlu menggunakan sistem baris gilir mesej kami dalam kelompok. Ini akan memastikan bahawa jika nod gagal, kami masih boleh meneruskan pemprosesan mesej.
Untuk mengelakkan kehilangan mesej penting, kami perlu membuat sandaran mesej. Ini boleh dicapai dengan menyimpan mesej merentasi berbilang nod atau sistem fail yang diedarkan.
Pemulihan kegagalan ialah salah satu bahagian terpenting untuk mencapai ketersediaan yang tinggi. Apabila nod gagal, kita perlu memastikan bahawa sistem baris gilir mesej boleh bertukar secara automatik ke nod lain dan meneruskan pemprosesan mesej. Ini boleh dicapai dengan menggunakan perkhidmatan penyelarasan yang diedarkan seperti ZooKeeper.
Jika sistem baris gilir mesej kami terjejas oleh beban yang tinggi, kami perlu memastikan ia boleh berskala untuk menyokong beban yang lebih besar. Ini boleh dicapai dengan menambahkan nod pengguna, atau dengan menggunakan pengimbang beban untuk mengagihkan beban merentas berbilang nod.
Ringkasan
Dalam artikel ini, kami memperkenalkan cara membina sistem baris gilir mesej asas menggunakan bahasa Go dan meneroka amalan terbaik untuk mencapai ketersediaan tinggi. Dengan melaksanakan amalan terbaik ini, kami boleh memastikan sistem baris gilir mesej kami sentiasa tersedia dan mampu mengendalikan aplikasi beban tinggi.
Atas ialah kandungan terperinci Bina sistem baris gilir mesej yang sangat tersedia menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!