Rumah >pembangunan bahagian belakang >Golang >Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine
Github: https://github.com/aceld/kis-flow
Dokumen: https://github.com/acceld/kis-flow/wiki
Bahagian1-Paparan Keseluruhan
Bahagian2.1-Pembinaan Projek / Modul Asas
Bahagian2.2-Pembinaan Projek / Modul Asas
Bahagian3-Strim Data
Bahagian4-Penjadualan Fungsi
Bahagian5-Penyambung
Bahagian6-Konfigurasi Import dan Eksport
Bahagian7-KisFlow Action
Bahagian8-Cache/Params Caching Data dan Parameter Data
Bahagian9-Berbilang Salinan Aliran
Bahagian10-Statistik Metrik Prometheus
Bahagian11-Pendaftaran Adaptif Jenis Parameter FaaS Berdasarkan Refleksi
Kes1-Permulaan Pantas
Kes2-Kendalian Selari Aliran
Kes3-Penggunaan KisFlow dalam Pelbagai Goroutine
Case4-KisFlow dalam Aplikasi Baris Mesej (MQ)
$go get github.com/aceld/kis-flow
Dokumentasi Pembangun KisFlow
https://github.com/acceld/kis-flow-usage/tree/main/6-flow_in_goroutines
Jika anda memerlukan Aliran yang sama untuk dijalankan serentak dalam berbilang Goroutine, anda boleh menggunakan fungsi flow.Fork() untuk mengklonkan tika Aliran dengan memori terpencil tetapi konfigurasi yang sama. Setiap tika Aliran kemudiannya boleh dilaksanakan dalam Goroutine yang berbeza untuk mengira aliran data masing-masing.
package main import ( "context" "fmt" "github.com/aceld/kis-flow/file" "github.com/aceld/kis-flow/kis" "sync" ) func main() { ctx := context.Background() // Get a WaitGroup var wg sync.WaitGroup // Load Configuration from file if err := file.ConfigImportYaml("conf/"); err != nil { panic(err) } // Get the flow flow1 := kis.Pool().GetFlow("CalStuAvgScore") if flow1 == nil { panic("flow1 is nil") } // Fork the flow flowClone1 := flow1.Fork(ctx) // Add to WaitGroup wg.Add(2) // Run Flow1 go func() { defer wg.Done() // Submit a string _ = flow1.CommitRow(`{"stu_id":101, "score_1":100, "score_2":90, "score_3":80}`) // Submit a string _ = flow1.CommitRow(`{"stu_id":1001, "score_1":100, "score_2":70, "score_3":60}`) // Run the flow if err := flow1.Run(ctx); err != nil { fmt.Println("err: ", err) } }() // Run FlowClone1 go func() { defer wg.Done() // Submit a string _ = flowClone1.CommitRow(`{"stu_id":201, "score_1":100, "score_2":90, "score_3":80}`) // Submit a string _ = flowClone1.CommitRow(`{"stu_id":2001, "score_1":100, "score_2":70, "score_3":60}`) if err := flowClone1.Run(ctx); err != nil { fmt.Println("err: ", err) } }() // Wait for Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine to finish wg.Wait() fmt.Println("All flows completed.") return } func init() { // Register functions kis.Pool().FaaS("VerifyStu", VerifyStu) kis.Pool().FaaS("AvgStuScore", AvgStuScore) kis.Pool().FaaS("PrintStuAvgScore", PrintStuAvgScore) }
Dalam coretan kod ini, kami memulakan dua Goroutine untuk menjalankan Flow1 dan klonnya (FlowClone1) secara serentak untuk mengira purata markah akhir untuk pelajar 101, 1001, 201 dan 2001.
Pengarang: Acold
GitHub: https://github.com/aceld
Alamat Projek Sumber Terbuka KisFlow: https://github.com/aceld/kis-flow
Dokumen: https://github.com/acceld/kis-flow/wiki
Bahagian1-Paparan Keseluruhan
Bahagian2.1-Pembinaan Projek / Modul Asas
Bahagian2.2-Pembinaan Projek / Modul Asas
Bahagian3-Strim Data
Bahagian4-Penjadualan Fungsi
Bahagian5-Penyambung
Bahagian6-Konfigurasi Import dan Eksport
Bahagian7-KisFlow Action
Bahagian8-Cache/Params Caching Data dan Parameter Data
Bahagian9-Berbilang Salinan Aliran
Bahagian10-Statistik Metrik Prometheus
Bahagian11-Pendaftaran Adaptif Jenis Parameter FaaS Berdasarkan Refleksi
Kes1-Permulaan Pantas
Kes2-Kendalian Selari Aliran
Kes3-Penggunaan KisFlow dalam Pelbagai Goroutine
Case4-KisFlow dalam Aplikasi Baris Mesej (MQ)
Atas ialah kandungan terperinci Kes (III) - KisFlow-Golang Stream Real- Aplikasi KisFlow dalam Multi-Gorutine. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!