Dengan perkembangan teknologi Internet, teknologi yang diedarkan menjadi semakin matang, dan senario aplikasinya menjadi semakin meluas. Dalam sistem teragih, baris gilir tugas ialah komponen biasa yang boleh memproses tugasan secara tidak segerak, mengurangkan tekanan sistem dan meningkatkan prestasi sistem. Artikel ini akan memperkenalkan amalan baris gilir tugasan teragih berdasarkan go-zero.
1. Pengenalan kepada go-zero
go-zero ialah rangka kerja mikro yang menyepadukan pelbagai komponen, termasuk rangka kerja RPC, rangka kerja web, komponen cache, pengehadan semasa, pemutus litar, dsb. Komponen biasa. Mudah digunakan dan berkuasa dalam prestasi, ia adalah pilihan terbaik untuk membangunkan aplikasi perkhidmatan mikro.
2. Pengenalan kepada baris gilir tugas
Baris gilir tugas ialah komponen sistem teragih biasa, yang digunakan terutamanya untuk tugas pemprosesan tak segerak. Barisan tugasan boleh digunakan untuk memotong puncak dan mengisi lembah, mengurangkan beban sistem dan meningkatkan prestasi sistem. Barisan tugasan biasanya terdiri daripada dua bahagian: pengeluar dan pengguna Pengeluar bertanggungjawab menjana tugas dan meletakkannya ke dalam baris gilir tugas, manakala pengguna bertanggungjawab untuk mendapatkan semula tugasan daripada baris gilir tugas dan melaksanakannya.
3. Pelaksanaan baris gilir tugas dalam go-zero
Baris gilir tugas dalam go-zero dilaksanakan menggunakan struktur senarai redis. Dalam go-zero, anda boleh membuat baris gilir tugas dengan mudah Operasi khusus adalah seperti berikut:
1 Cipta struktur tugas
Struktur tugas mengandungi maklumat seperti jenis tugas, data perniagaan , dsb., seperti berikut Reka bentuk mengikut keperluan sebenar.
taip struct Tugasan {
Type int //任务类型 Data interface{} //业务数据
}
2 Cipta baris gilir tugasan
Gunakan struktur senarai redis untuk melaksanakan baris gilir tugasan, dan gunakan. arahan lpush redis Letakkan tugasan ke dalam baris gilir dan dapatkan tugasan daripada baris gilir melalui arahan rpop. Dalam go-zero, anda boleh menyambung ke perkhidmatan redis melalui pakej goredis dan melaksanakan arahan yang berkaitan.
func pushTask(task Task) {
data, _ := json.Marshal(task) conn := redis.RedisClient().Get() defer conn.Close() conn.Do("lpush", "task_queue", data)
}
func popTask() Task {
conn := redis.RedisClient().Get() defer conn.Close() taskStr, _ := redis.String(conn.Do("rpop", "task_queue")) var task Task json.Unmarshal([]byte(taskStr), &task) return task
}
Dalam keadaan sebenar projek , baris gilir tugas boleh dikembangkan mengikut keperluan, seperti meningkatkan masa tamat tugas, mekanisme percubaan semula tugas, dsb.
4. Tugas pemprosesan teragih
Dalam sistem teragih sebenar, baris gilir tugas biasanya digunakan pada pelayan bebas dan nod perkhidmatan yang berbeza disambungkan kepada baris gilir tugas yang sama untuk pemprosesan tugas. Untuk mencapai pengimbangan beban dan ketersediaan tinggi, penyebaran baris gilir tugas boleh dicapai dengan memperkenalkan perisian tengah yang biasa digunakan termasuk kafka, rabbitmq, dsb.
Dalam go-zero, kami boleh menyepadukan baris gilir tugas dengan lancar dengan perisian tengah melalui storan perpustakaan.
1 Cipta baris gilir tugasan
Mencipta baris gilir tugasan dalam go-zero memerlukan penciptaan memori dahulu, yang melaluinya memori boleh disambungkan ke perisian tengah yang berbeza.
// Cipta storan
c := &redis.CacheConf{
CacheConf: cache.CacheConf{ Mode: cache.CacheRedis, Redis: redis.RedisConf{ Type: redis.NodeType, Node: redisConfig.Redis.Node, Name: redisConfig.Redis.Name, Password: redisConfig.Redis.Password, }, },
}
// Cipta baris gilir tugas melalui storan
taskQueue := queue.Baharu ("task_queue", c)
2. Cipta pengeluar dan pengguna
Pengeluar dan pengguna disambungkan melalui baris gilir tugasan Pengeluar bertanggungjawab menghantar tugasan ke baris gilir tugas, dan pengguna Bertanggungjawab untuk mendapatkan tugas daripada baris gilir tugas dan melaksanakannya.
// Buat pengeluar
producer := taskQueue.Producer()
// Buat kumpulan pengguna dan langgan baris gilir tugas
consumer := taskQueue.NewConsumerGroup(
"task_group", []string{"task_queue"}, handleTask, queue.WithConsumerGroupConcurrency(concurrency),
)
3. Tulis fungsi pemprosesan tugas
Fungsi pemprosesan tugasan digunakan untuk melaksanakan logik pemprosesan tugas tertentu dan boleh disesuaikan mengikut keperluan projek sebenar.
func handleTask(ctx context.Context, msgs []*primitive.Message) error {
for _, msg := range msgs { fmt.Printf("Received message: %s
", msg.Body)
// TODO: 处理具体业务逻辑 } return nil
}
Melalui langkah di atas, kami boleh menyepadukan baris gilir tugas dengan lancar dengan lancar untuk mencapai pemprosesan tugas teragih
5 Ringkasan
Melalui amalan di atas, kami telah mempelajari tentang go- Bagaimana baris gilir tugasan. dilaksanakan dalam sifar, dan cara menyepadukan baris gilir tugas dengan lancar untuk mencapai pemprosesan tugas teragih Sebagai rangka kerja mikro berprestasi tinggi, go-zero mempunyai set komponen yang kaya yang boleh membantu pembangun membina sistem teragih berprestasi tinggi alami pesona go-zero bersama-sama!
Atas ialah kandungan terperinci Amalan giliran tugasan yang diedarkan berdasarkan go-zero. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!