-
Notifications
You must be signed in to change notification settings - Fork 185
/
user.go
54 lines (47 loc) · 1.45 KB
/
user.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
53
54
package client
import (
"context"
"github.com/longjoy/micro-go-book/ch13-seckill/pb"
"github.com/longjoy/micro-go-book/ch13-seckill/pkg/discover"
"github.com/longjoy/micro-go-book/ch13-seckill/pkg/loadbalance"
"github.com/opentracing/opentracing-go"
)
type UserClient interface {
CheckUser(ctx context.Context, tracer opentracing.Tracer, request *pb.UserRequest) (*pb.UserResponse, error)
}
type UserClientImpl struct {
/**
* 可以配置负载均衡策略,重试、等机制。也可以配置invokeAfter和invokerBefore
*/
manager ClientManager
serviceName string
loadBalance loadbalance.LoadBalance
tracer opentracing.Tracer
}
func (impl *UserClientImpl) CheckUser(ctx context.Context, tracer opentracing.Tracer, request *pb.UserRequest) (*pb.UserResponse, error) {
response := new(pb.UserResponse)
if err := impl.manager.DecoratorInvoke("/pb.UserService/Check", "user_check", tracer, ctx, request, response); err == nil {
return response, nil
} else {
return nil, err
}
}
func NewUserClient(serviceName string, lb loadbalance.LoadBalance, tracer opentracing.Tracer) (UserClient, error) {
if serviceName == "" {
serviceName = "user"
}
if lb == nil {
lb = defaultLoadBalance
}
return &UserClientImpl{
manager: &DefaultClientManager{
serviceName: serviceName,
loadBalance: lb,
discoveryClient:discover.ConsulService,
logger:discover.Logger,
},
serviceName: serviceName,
loadBalance: lb,
tracer: tracer,
}, nil
}