W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
路由與負(fù)載均衡主要的接口是 Selector,在同目錄下也提供了一個(gè)默認(rèn)的 Selector 實(shí)現(xiàn),該實(shí)現(xiàn)可以通過替換 NodeBuilder、Filter、Balancer 來分別實(shí)現(xiàn)節(jié)點(diǎn)權(quán)重計(jì)算算法、服務(wù)路由過濾策略、負(fù)載均衡算法的可插拔
type Selector interface {
// Selector 內(nèi)部維護(hù)的服務(wù)節(jié)點(diǎn)列表通過 Rebalancer 接口來更新
Rebalancer
// Select nodes
// if err == nil, selected and done must not be empty.
Select(ctx context.Context, opts ...SelectOption) (selected Node, done DoneFunc, err error)
}
// 通過Rebalancer實(shí)現(xiàn)服務(wù)節(jié)點(diǎn)變更感知
type Rebalancer interface {
Apply(nodes []Node)
}
已支持的實(shí)現(xiàn):
import "github.com/go-kratos/kratos/v2/selector/p2c"
import "github.com/go-kratos/kratos/v2/selector/filter"
// 創(chuàng)建路由 Filter:篩選版本號(hào)為"2.0.0"的實(shí)例
filter := filter.Version("2.0.0")
// 創(chuàng)建 P2C 負(fù)載均衡算法 Selector,并將路由 Filter 注入
selector := p2c.New(p2c.WithFilter(filter))
hConn, err := http.NewClient(
context.Background(),
http.WithEndpoint("discovery:///helloworld"),
http.WithDiscovery(r),
// 通過 http.WithSelector 將 Selector 注入 HTTP Client 中
http.WithSelector(
p2c.New(p2c.WithFilter(filter.Version("2.0.0"))),
)
)
import "github.com/go-kratos/kratos/v2/selector/p2c"
import "github.com/go-kratos/kratos/v2/selector/filter"
// 創(chuàng)建路由 Filter:篩選版本號(hào)為"2.0.0"的實(shí)例
filter := filter.Version("2.0.0")
conn, err := grpc.DialInsecure(
context.Background(),
grpc.WithEndpoint("discovery:///helloworld"),
grpc.WithDiscovery(r),
// 由于 gRPC 框架的限制,只能使用全局 balancer name 的方式來注入 selector
grpc.WithBalancerName(wrr.Name),
// 通過 grpc.WithFilter 注入路由 Filter
grpc.WithFilter(filter),
)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: