思路
- 每个微服务可以定义为一个独立的Go协程。
- 使用
WaitGroup
来同步这些协程,确保所有微服务都完成数据处理后再进行结果汇总。
- 每个协程完成任务后调用
WaitGroup
的Done
方法。
- 主协程使用
WaitGroup
的Wait
方法等待所有协程完成。
核心代码
package main
import (
"fmt"
"sync"
)
// 模拟微服务处理函数
func microservice1(resultChan chan int, wg *sync.WaitGroup) {
defer wg.Done()
// 模拟数据处理
resultChan <- 10
}
func microservice2(resultChan chan int, wg *sync.WaitGroup) {
defer wg.Done()
// 模拟数据处理
resultChan <- 20
}
func main() {
var wg sync.WaitGroup
resultChan1 := make(chan int)
resultChan2 := make(chan int)
// 启动微服务1
wg.Add(1)
go microservice1(resultChan1, &wg)
// 启动微服务2
wg.Add(1)
go microservice2(resultChan2, &wg)
go func() {
wg.Wait()
close(resultChan1)
close(resultChan2)
}()
var total int
for result := range resultChan1 {
total += result
}
for result := range resultChan2 {
total += result
}
fmt.Printf("汇总结果: %d\n", total)
}