examples/apigateway: fix for new addsvc
Peter Bourgon
6 years ago
15 | 15 | "syscall" |
16 | 16 | "time" |
17 | 17 | |
18 | consulsd "github.com/go-kit/kit/sd/consul" | |
18 | 19 | "github.com/gorilla/mux" |
19 | 20 | "github.com/hashicorp/consul/api" |
20 | 21 | stdopentracing "github.com/opentracing/opentracing-go" |
22 | "google.golang.org/grpc" | |
21 | 23 | |
22 | 24 | "github.com/go-kit/kit/endpoint" |
23 | "github.com/go-kit/kit/examples/addsvc" | |
24 | addsvcgrpcclient "github.com/go-kit/kit/examples/addsvc/client/grpc" | |
25 | 25 | "github.com/go-kit/kit/log" |
26 | 26 | "github.com/go-kit/kit/sd" |
27 | consulsd "github.com/go-kit/kit/sd/consul" | |
28 | 27 | "github.com/go-kit/kit/sd/lb" |
29 | 28 | httptransport "github.com/go-kit/kit/transport/http" |
30 | "google.golang.org/grpc" | |
29 | ||
30 | "github.com/go-kit/kit/examples/addsvc/pkg/addendpoint" | |
31 | "github.com/go-kit/kit/examples/addsvc/pkg/addservice" | |
32 | "github.com/go-kit/kit/examples/addsvc/pkg/addtransport" | |
31 | 33 | ) |
32 | 34 | |
33 | 35 | func main() { |
78 | 80 | // addsvc client package to construct a complete service. We can then |
79 | 81 | // leverage the addsvc.Make{Sum,Concat}Endpoint constructors to convert |
80 | 82 | // the complete service to specific endpoint. |
81 | ||
82 | 83 | var ( |
83 | 84 | tags = []string{} |
84 | 85 | passingOnly = true |
85 | endpoints = addsvc.Endpoints{} | |
86 | endpoints = addendpoint.Set{} | |
86 | 87 | instancer = consulsd.NewInstancer(client, logger, "addsvc", tags, passingOnly) |
87 | 88 | ) |
88 | 89 | { |
89 | factory := addsvcFactory(addsvc.MakeSumEndpoint, tracer, logger) | |
90 | factory := addsvcFactory(addendpoint.MakeSumEndpoint, tracer, logger) | |
90 | 91 | endpointer := sd.NewEndpointer(instancer, factory, logger) |
91 | 92 | balancer := lb.NewRoundRobin(endpointer) |
92 | 93 | retry := lb.Retry(*retryMax, *retryTimeout, balancer) |
93 | 94 | endpoints.SumEndpoint = retry |
94 | 95 | } |
95 | 96 | { |
96 | factory := addsvcFactory(addsvc.MakeConcatEndpoint, tracer, logger) | |
97 | factory := addsvcFactory(addendpoint.MakeConcatEndpoint, tracer, logger) | |
97 | 98 | endpointer := sd.NewEndpointer(instancer, factory, logger) |
98 | 99 | balancer := lb.NewRoundRobin(endpointer) |
99 | 100 | retry := lb.Retry(*retryMax, *retryTimeout, balancer) |
104 | 105 | // HTTP handler, and just install it under a particular path prefix in |
105 | 106 | // our router. |
106 | 107 | |
107 | r.PathPrefix("/addsvc").Handler(http.StripPrefix("/addsvc", addsvc.MakeHTTPHandler(endpoints, tracer, logger))) | |
108 | r.PathPrefix("/addsvc").Handler(http.StripPrefix("/addsvc", addtransport.NewHTTPHandler(endpoints, tracer, logger))) | |
108 | 109 | } |
109 | 110 | |
110 | 111 | // stringsvc routes. |
163 | 164 | logger.Log("exit", <-errc) |
164 | 165 | } |
165 | 166 | |
166 | func addsvcFactory(makeEndpoint func(addsvc.Service) endpoint.Endpoint, tracer stdopentracing.Tracer, logger log.Logger) sd.Factory { | |
167 | func addsvcFactory(makeEndpoint func(addservice.Service) endpoint.Endpoint, tracer stdopentracing.Tracer, logger log.Logger) sd.Factory { | |
167 | 168 | return func(instance string) (endpoint.Endpoint, io.Closer, error) { |
168 | 169 | // We could just as easily use the HTTP or Thrift client package to make |
169 | 170 | // the connection to addsvc. We've chosen gRPC arbitrarily. Note that |
174 | 175 | if err != nil { |
175 | 176 | return nil, nil, err |
176 | 177 | } |
177 | service := addsvcgrpcclient.New(conn, tracer, logger) | |
178 | service := addtransport.NewGRPCClient(conn, tracer, logger) | |
178 | 179 | endpoint := makeEndpoint(service) |
179 | 180 | |
180 | 181 | // Notice that the addsvc gRPC client converts the connection to a |