Skip to content

Commit

Permalink
change name
Browse files Browse the repository at this point in the history
  • Loading branch information
zhufuyi committed Nov 16, 2022
1 parent 881fae1 commit d1b0322
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 35 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -51,7 +51,7 @@
- [grpccli grpc 客户端](grpc/grpccli)
- [gtls TLS加密传输](grpc/gtls)
- [keepalive 保持连接](grpc/keepalive)
- [loadbalance 负载均衡](grpc/loadbalance)
- [loadbalance 负载均衡](grpc/resolve)
- [metrics rpc指标](grpc/metrics)
- [interceptor 客户端和服务端的拦截器](grpc/interceptor)
- [breaker 熔断器](grpc/interceptor/breaker.go)
Expand Down
10 changes: 4 additions & 6 deletions grpc/loadbalance/README.md → grpc/resolve/README.md
@@ -1,4 +1,4 @@
## loadbalance
## resolve

### 使用示例

Expand All @@ -18,10 +18,8 @@ func getDialOptions() []grpc.DialOption {
}

func main() {
target := loadbalance.Register("grpc", "hello.grpc.io", []string{"127.0.0.1:8080", "127.0.0.1:8081", "127.0.0.1:8082"})
fmt.Println(target)

roundRobinConn, err := grpc.Dial(target, getDialOptions()...)
endpoint := resolve.Register("grpc", "hello.grpc.io", []string{"127.0.0.1:8282", "127.0.0.1:8284", "127.0.0.1:8286"})
roundRobinConn, err := grpc.Dial(endpoint, getDialOptions()...)
if err != nil {
panic(err)
}
Expand All @@ -36,4 +34,4 @@ func main() {
time.Sleep(time.Second * 2)
}
}
```
```
46 changes: 26 additions & 20 deletions grpc/loadbalance/loadbalance.go → grpc/resolve/resolve.go
@@ -1,51 +1,57 @@
package loadbalance
package resolve

import (
"fmt"
"net/url"
"sync"

"google.golang.org/grpc/resolver"
)

var mux = &sync.Mutex{}
var mutex = &sync.Mutex{}

// Register 注册地址到resolver map
func Register(schemeStr string, serviceNameStr string, address []string) string {
mux.Lock()
defer mux.Unlock()
// Register address and serviceName
func Register(scheme string, serviceName string, address []string) string {
mutex.Lock()
defer mutex.Unlock()

endpoint := fmt.Sprintf("%s:///%s", scheme, serviceName)
u, _ := url.Parse(endpoint)

resolver.Register(&ResolverBuilder{
SchemeVal: schemeStr,
ServiceName: serviceNameStr,
Addrs: address,
scheme: scheme,
serviceName: serviceName,
addrs: address,
path: u.Path,
})

return fmt.Sprintf("%s:///%s", schemeStr, serviceNameStr)
return endpoint
}

// ResolverBuilder 解析生成器
// ResolverBuilder resolver struct
type ResolverBuilder struct {
SchemeVal string // SchemeVal作为唯一标致,重复会被覆盖addrs
ServiceName string
Addrs []string
scheme string
serviceName string
addrs []string
path string
}

// Build 创建生成器
// Build resolver
func (r *ResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
blr := &blResolver{
target: target,
cc: cc,
addrsStore: map[string][]string{
r.ServiceName: r.Addrs,
r.path: r.addrs,
},
}
blr.start()
return blr, nil
}

// Scheme 设置Scheme值
// Scheme get scheme
func (r *ResolverBuilder) Scheme() string {
return r.SchemeVal
return r.scheme
}

type blResolver struct {
Expand All @@ -63,8 +69,8 @@ func (b *blResolver) start() {
_ = b.cc.UpdateState(resolver.State{Addresses: addrs})
}

// ResolveNow 当前解析生成器
// ResolveNow Resolve now
func (*blResolver) ResolveNow(o resolver.ResolveNowOptions) {}

// Close 关闭
// Close resolver
func (*blResolver) Close() {}
@@ -1,22 +1,23 @@
package loadbalance
package resolve

import (
"strings"
"testing"

"github.com/stretchr/testify/assert"
"google.golang.org/grpc/resolver"
"google.golang.org/grpc/serviceconfig"
"strings"
"testing"
)

var r = &ResolverBuilder{
SchemeVal: "grpc",
ServiceName: "demo",
Addrs: []string{"localhost:8282"},
scheme: "grpc",
serviceName: "demo",
addrs: []string{"localhost:8282"},
}

func TestRegister(t *testing.T) {
s := Register(r.SchemeVal, r.ServiceName, r.Addrs)
assert.Equal(t, true, strings.Contains(s, r.ServiceName))
s := Register(r.scheme, r.serviceName, r.addrs)
assert.Equal(t, true, strings.Contains(s, r.serviceName))
}

func TestResolverBuilder_Build(t *testing.T) {
Expand Down

0 comments on commit d1b0322

Please sign in to comment.