/
strategy.go
52 lines (43 loc) · 1.34 KB
/
strategy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// SPDX-FileCopyrightText: 2018-2024 caixw
//
// SPDX-License-Identifier: MIT
package registry
import "github.com/issue9/web/selector"
// Strategy 为初始化 [Registry] 对象提供的方案
type Strategy struct {
// NewSelector 构建 [selector.Updateable]
NewSelector func() selector.Updateable
// NewPeer 构建与 [Strategy.NewSelector] 相匹配的 [selector.Peer] 零值对象
NewPeer func() selector.Peer
}
func NewStrategy(sel func() selector.Updateable, p func() selector.Peer) *Strategy {
return &Strategy{NewSelector: sel, NewPeer: p}
}
func NewRandomStrategy() *Strategy {
return NewStrategy(func() selector.Updateable {
return selector.NewRandom(false, 10)
}, func() selector.Peer {
return selector.NewPeer("")
})
}
func NewWeightedRandomStrategy() *Strategy {
return NewStrategy(func() selector.Updateable {
return selector.NewRandom(true, 10)
}, func() selector.Peer {
return selector.NewWeightedPeer("", 0)
})
}
func NewRoundRobinStrategy() *Strategy {
return NewStrategy(func() selector.Updateable {
return selector.NewRoundRobin(false, 10)
}, func() selector.Peer {
return selector.NewPeer("")
})
}
func NewWeightedRoundRobinStrategy() *Strategy {
return NewStrategy(func() selector.Updateable {
return selector.NewRoundRobin(true, 10)
}, func() selector.Peer {
return selector.NewWeightedPeer("", 0)
})
}