2 Star 1 Fork 1

mosache / YFrame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
balancer.go 890 Bytes
一键复制 编辑 原始数据 按行查看 历史
ヤ沒脩袮兲︶ 提交于 2023-09-07 18:31 . temp
/*
普通轮询
*/
package round_robin
import (
"gitee.com/mosache/YFrame/micro/loadbalance"
"google.golang.org/grpc/balancer"
"google.golang.org/grpc/balancer/base"
"sync/atomic"
)
type Builder struct {
*loadbalance.Builder
}
func (b *Builder) Build(info base.PickerBuildInfo) balancer.Picker {
p := b.Builder.Build(info).(*Balancer)
return p
}
type Balancer struct {
index uint64
length uint64
loadbalance.Picker
}
func NewBalancer(nodes []*loadbalance.NodeInfo) *Balancer {
return &Balancer{
index: 0,
length: uint64(len(nodes)),
Picker: loadbalance.Picker{Nodes: nodes},
}
}
func (b *Balancer) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
if b.length == 0 {
return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
}
idx := atomic.AddUint64(&b.index, 1)
return balancer.PickResult{
SubConn: b.Nodes[idx%b.length].SubConn,
}, nil
}
Go
1
https://gitee.com/mosache/YFrame.git
git@gitee.com:mosache/YFrame.git
mosache
YFrame
YFrame
v0.1.76

搜索帮助