2 Star 1 Fork 1

mosache/YFrame

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
balancer.go 890 Bytes
Copy Edit Raw Blame History
ヤ沒脩袮兲︶ authored 2023-09-07 18:31 +08:00 . 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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mosache/YFrame.git
git@gitee.com:mosache/YFrame.git
mosache
YFrame
YFrame
v0.1.116

Search