-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
109 lines (79 loc) · 2.17 KB
/
client.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main
import (
"flag"
"fmt"
"gitee.com/godY/gokit-inaction/consul/kit/grpc/svr/kit"
"gitee.com/godY/gokit-inaction/consul/kit/grpc/svr/pb"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/sd"
"github.com/go-kit/kit/sd/consul"
"github.com/go-kit/kit/sd/lb"
kitgrpc "github.com/go-kit/kit/transport/grpc"
"github.com/hashicorp/consul/api"
"golang.org/x/net/context"
"google.golang.org/grpc"
"io"
"os"
"time"
)
func main() {
us := NewUserClient()
for i := 0; i < 10; i++ {
req := pb.LoginReq{}
req.Username = "abc"
req.Pwd = "123"
res, e := us.Login(context.Background(), &req)
if e != nil {
fmt.Println(e)
return
}
fmt.Println(res.Code, res.Msg)
}
}
type UserClient struct {
LoginEndpoint endpoint.Endpoint
}
func NewUserClient() pb.UserServer {
loginEndpoint := newEndpoint()
return &UserClient{LoginEndpoint: loginEndpoint}
}
func (uc UserClient) Login(ctx context.Context, req *pb.LoginReq) (*pb.LoginRes, error) {
res, e := uc.LoginEndpoint(ctx, req)
if e != nil {
return nil, e
}
return res.(*pb.LoginRes), nil
}
func newEndpoint() endpoint.Endpoint {
var logger log.Logger
{
logger = log.NewLogfmtLogger(os.Stderr)
logger = log.With(logger, "ts", log.DefaultTimestampUTC)
logger = log.With(logger, "caller", log.DefaultCaller)
}
consuladdr := flag.String("consul.addr", "192.168.10.210:8500", "")
flag.Parse()
cfg := api.DefaultConfig()
cfg.Address = *consuladdr
c, e := api.NewClient(cfg)
if e != nil {
logger.Log("err", e)
os.Exit(-1)
}
kitc := consul.NewClient(c)
instancer := consul.NewInstancer(kitc, logger, "GrpcUserSvr", nil, true)
endpointer := sd.NewEndpointer(instancer, func(instance string) (endpoint.Endpoint, io.Closer, error) {
logger.Log("instance", instance)
conn, e := grpc.Dial(instance, grpc.WithInsecure())
//defer conn.Close()
if e != nil {
fmt.Println(e)
os.Exit(-1)
}
return kitgrpc.NewClient(conn, "pb.User", "Login", kit.NoEncodeRequestFunc, kit.NoDecodeResponseFunc, pb.LoginRes{}).Endpoint(), conn, nil
}, logger)
balancer := lb.NewRoundRobin(endpointer)
retry := lb.Retry(3, 5000*time.Millisecond, balancer)
return retry
}