/
grpc.go
66 lines (56 loc) · 2.04 KB
/
grpc.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
// Package grpc provides a gRPC client for the add service.
package grpc
import (
_ "time"
jujuratelimit "github.com/juju/ratelimit"
stdopentracing "github.com/opentracing/opentracing-go"
//"github.com/sony/gobreaker"
"google.golang.org/grpc"
//"github.com/go-kit/kit/circuitbreaker"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/ratelimit"
"github.com/go-kit/kit/tracing/opentracing"
grpctransport "github.com/go-kit/kit/transport/grpc"
"github.com/yiv/yivgame/usercenter/pb"
"github.com/yiv/yivgame/usercenter/service"
)
func New(conn *grpc.ClientConn, tracer stdopentracing.Tracer, logger log.Logger) service.Service {
limiter := ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(100, 100))
var getUserInfoEndpoint endpoint.Endpoint
{
getUserInfoEndpoint = grpctransport.NewClient(
conn,
"pb.User",
"GetUserInfo",
service.EncodeGRPCGetUserInfoReq,
service.DecodeGRPCGetUserInfoRes,
pb.UserInfo{},
grpctransport.ClientBefore(opentracing.ContextToGRPC(tracer, logger)),
).Endpoint()
getUserInfoEndpoint = opentracing.TraceClient(tracer, "GetUserInfo")(getUserInfoEndpoint)
getUserInfoEndpoint = limiter(getUserInfoEndpoint)
}
return service.Endpoints{
GetUserInfoEndpoint: getUserInfoEndpoint,
}
}
//func makeEndpoint(serviceName, method string, conn *grpc.ClientConn, grpcReply interface{}, tracer stdopentracing.Tracer, logger log.Logger, limiter endpoint.Middleware, enc grpctransport.EncodeRequestFunc, dec grpctransport.DecodeResponseFunc) endpoint.Endpoint {
// var endpoint endpoint.Endpoint
// endpoint = grpctransport.NewClient(
// conn,
// serviceName,
// method,
// enc,
// dec,
// grpcReply,
// grpctransport.ClientBefore(opentracing.ToGRPCRequest(tracer, logger)),
// ).Endpoint()
// endpoint = opentracing.TraceClient(tracer, method)(endpoint)
// endpoint = limiter(endpoint)
// //endpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{
// //Name: method,
// //Timeout: 1 * time.Second,
// //}))(endpoint)
// return endpoint
//}