本文整理汇总了Golang中github.com/go-kit/kit/transport/http.NewClient函数的典型用法代码示例。如果您正苦于以下问题:Golang NewClient函数的具体用法?Golang NewClient怎么用?Golang NewClient使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewClient函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: New
// New returns an AddService that's backed by the URL. baseurl will have its
// scheme and hostport used, but its path will be overwritten. If client is
// nil, http.DefaultClient will be used.
func New(ctx context.Context, baseurl *url.URL, logger log.Logger, c *http.Client) server.AddService {
sumURL, err := url.Parse(baseurl.String())
if err != nil {
panic(err)
}
concatURL, err := url.Parse(baseurl.String())
if err != nil {
panic(err)
}
sumURL.Path = "/sum"
concatURL.Path = "/concat"
return client{
Context: ctx,
Logger: logger,
sum: httptransport.NewClient(
"GET",
sumURL,
server.EncodeSumRequest,
server.DecodeSumResponse,
).Endpoint(),
concat: httptransport.NewClient(
"GET",
concatURL,
server.EncodeConcatRequest,
server.DecodeConcatResponse,
).Endpoint(),
}
}
开发者ID:cnicolov,项目名称:kit,代码行数:31,代码来源:client.go
示例2: MakeClientEndpoints
// MakeClientEndpoints returns an Endpoints struct where each endpoint invokes
// the corresponding method on the remote instance, via a transport/http.Client.
// Useful in a restsvc client.
func MakeClientEndpoints(instance string) (Endpoints, error) {
if !strings.HasPrefix(instance, "http") {
instance = "http://" + instance
}
tgt, err := url.Parse(instance)
if err != nil {
return Endpoints{}, err
}
tgt.Path = ""
options := []httptransport.ClientOption{}
// Note that the request encoders need to modify the request URL, changing
// the path and method. That's fine: we simply need to provide specific
// encoders for each endpoint.
return Endpoints{
PostConfigEndpoint: httptransport.NewClient("POST", tgt, encodePostConfigRequest, decodePostConfigResponse, options...).Endpoint(),
GetConfigEndpoint: httptransport.NewClient("GET", tgt, encodeGetConfigRequest, decodeGetConfigResponse, options...).Endpoint(),
PutConfigEndpoint: httptransport.NewClient("PUT", tgt, encodePutConfigRequest, decodePutConfigResponse, options...).Endpoint(),
PatchConfigEndpoint: httptransport.NewClient("PATCH", tgt, encodePatchConfigRequest, decodePatchConfigResponse, options...).Endpoint(),
DeleteConfigEndpoint: httptransport.NewClient("DELETE", tgt, encodeDeleteConfigRequest, decodeDeleteConfigResponse, options...).Endpoint(),
GetChannelsEndpoint: httptransport.NewClient("GET", tgt, encodeGetChannelsRequest, decodeGetChannelsResponse, options...).Endpoint(),
GetChannelEndpoint: httptransport.NewClient("GET", tgt, encodeGetChannelRequest, decodeGetChannelResponse, options...).Endpoint(),
PostChannelEndpoint: httptransport.NewClient("POST", tgt, encodePostChannelRequest, decodePostChannelResponse, options...).Endpoint(),
DeleteChannelEndpoint: httptransport.NewClient("DELETE", tgt, encodeDeleteChannelRequest, decodeDeleteChannelResponse, options...).Endpoint(),
GetNotesEndpoint: httptransport.NewClient("GET", tgt, encodeGetNotesRequest, decodeGetNotesResponse, options...).Endpoint(),
}, nil
}
开发者ID:patterns,项目名称:re,代码行数:32,代码来源:endpoints.go
示例3: New
// New returns an AddService backed by an HTTP server living at the remote
// instance. We expect instance to come from a service discovery system, so
// likely of the form "host:port".
func New(instance string, tracer stdopentracing.Tracer, logger log.Logger) (addsvc.Service, error) {
if !strings.HasPrefix(instance, "http") {
instance = "http://" + instance
}
u, err := url.Parse(instance)
if err != nil {
return nil, err
}
// We construct a single ratelimiter middleware, to limit the total outgoing
// QPS from this client to all methods on the remote instance. We also
// construct per-endpoint circuitbreaker middlewares to demonstrate how
// that's done, although they could easily be combined into a single breaker
// for the entire remote instance, too.
limiter := ratelimit.NewTokenBucketLimiter(jujuratelimit.NewBucketWithRate(100, 100))
var sumEndpoint endpoint.Endpoint
{
sumEndpoint = httptransport.NewClient(
"POST",
copyURL(u, "/sum"),
addsvc.EncodeHTTPGenericRequest,
addsvc.DecodeHTTPSumResponse,
httptransport.SetClientBefore(opentracing.FromHTTPRequest(tracer, "Sum", logger)),
).Endpoint()
sumEndpoint = opentracing.TraceClient(tracer, "Sum")(sumEndpoint)
sumEndpoint = limiter(sumEndpoint)
sumEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "Sum",
Timeout: 30 * time.Second,
}))(sumEndpoint)
}
var concatEndpoint endpoint.Endpoint
{
concatEndpoint = httptransport.NewClient(
"POST",
copyURL(u, "/concat"),
addsvc.EncodeHTTPGenericRequest,
addsvc.DecodeHTTPConcatResponse,
httptransport.SetClientBefore(opentracing.FromHTTPRequest(tracer, "Concat", logger)),
).Endpoint()
concatEndpoint = opentracing.TraceClient(tracer, "Concat")(concatEndpoint)
concatEndpoint = limiter(concatEndpoint)
sumEndpoint = circuitbreaker.Gobreaker(gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "Concat",
Timeout: 30 * time.Second,
}))(sumEndpoint)
}
return addsvc.Endpoints{
SumEndpoint: sumEndpoint,
ConcatEndpoint: concatEndpoint,
}, nil
}
开发者ID:subodhchhabra,项目名称:kit,代码行数:59,代码来源:client.go
示例4: TestClientEndpointEncodeError
func TestClientEndpointEncodeError(t *testing.T) {
var (
sampleErr = errors.New("Oh no, an error")
enc = func(r *http.Request, request interface{}) error { return sampleErr }
dec = func(r *http.Response) (response interface{}, err error) { return nil, nil }
)
u := &url.URL{
Scheme: "https",
Host: "localhost",
Path: "/does/not/matter",
}
c := httptransport.NewClient(
"GET",
u,
enc,
dec,
)
_, err := c.Endpoint()(context.Background(), nil)
if err == nil {
t.Fatal("err == nil")
}
e, ok := err.(httptransport.TransportError)
if !ok {
t.Fatal("err is not of type github.com/go-kit/kit/transport/http.Err")
}
if want, have := sampleErr, e.Err; want != have {
t.Fatalf("want %v, have %v", want, have)
}
}
开发者ID:qband,项目名称:down,代码行数:34,代码来源:err_test.go
示例5: stringsvcFactory
func stringsvcFactory(ctx context.Context, method, path string) sd.Factory {
return func(instance string) (endpoint.Endpoint, io.Closer, error) {
if !strings.HasPrefix(instance, "http") {
instance = "http://" + instance
}
tgt, err := url.Parse(instance)
if err != nil {
return nil, nil, err
}
tgt.Path = path
// Since stringsvc doesn't have any kind of package we can import, or
// any formal spec, we are forced to just assert where the endpoints
// live, and write our own code to encode and decode requests and
// responses. Ideally, if you write the service, you will want to
// provide stronger guarantees to your clients.
var (
enc httptransport.EncodeRequestFunc
dec httptransport.DecodeResponseFunc
)
switch path {
case "/uppercase":
enc, dec = encodeJSONRequest, decodeUppercaseResponse
case "/count":
enc, dec = encodeJSONRequest, decodeCountResponse
default:
return nil, nil, fmt.Errorf("unknown stringsvc path %q", path)
}
return httptransport.NewClient(method, tgt, enc, dec).Endpoint(), nil, nil
}
}
开发者ID:crezam,项目名称:kit,代码行数:33,代码来源:main.go
示例6: newSetVerbosityEndpoint
func newSetVerbosityEndpoint(URL url.URL, path string) endpoint.Endpoint {
URL.Path = path
URL.RawPath = path
newEndpoint := httptransport.NewClient(
"POST",
&URL,
setVerbosityEncoder,
setVerbosityDecoder,
).Endpoint()
return newEndpoint
}
开发者ID:xh3b4sd,项目名称:anna,代码行数:13,代码来源:endpoint.go
示例7: newResetLevelsEndpoint
func newResetLevelsEndpoint(URL url.URL, path string) endpoint.Endpoint {
URL.Path = path
URL.RawPath = path
newEndpoint := httptransport.NewClient(
"POST",
&URL,
resetLevelsEncoder,
resetLevelsDecoder,
).Endpoint()
return newEndpoint
}
开发者ID:xh3b4sd,项目名称:anna,代码行数:13,代码来源:endpoint.go
示例8: makeFetchRoutesEndpoint
func makeFetchRoutesEndpoint(ctx context.Context, instance string) endpoint.Endpoint {
u, err := url.Parse(instance)
if err != nil {
panic(err)
}
if u.Path == "" {
u.Path = "/paths"
}
return kithttp.NewClient(
"GET", u,
encodeFetchRoutesRequest,
decodeFetchRoutesResponse,
).Endpoint()
}
开发者ID:crezam,项目名称:kit,代码行数:14,代码来源:proxying.go
示例9: httpFactory
func httpFactory(ctx context.Context, method, path string) loadbalancer.Factory {
return func(instance string) (endpoint.Endpoint, io.Closer, error) {
var e endpoint.Endpoint
if !strings.HasPrefix(instance, "http") {
instance = "http://" + instance
}
u, err := url.Parse(instance)
if err != nil {
return nil, nil, err
}
u.Path = path
e = httptransport.NewClient(method, u, passEncode, passDecode).Endpoint()
return e, nil, nil
}
}
开发者ID:xiejianzheng,项目名称:goddd,代码行数:16,代码来源:main.go
示例10: SumEndpointFactory
// SumEndpointFactory transforms a http url into an Endpoint.
// The path of the url is reset to /sum.
func SumEndpointFactory(instance string) (endpoint.Endpoint, io.Closer, error) {
sumURL, err := url.Parse(instance)
if err != nil {
return nil, nil, err
}
sumURL.Path = "/sum"
client := httptransport.NewClient(
"GET",
sumURL,
server.EncodeSumRequest,
server.DecodeSumResponse,
httptransport.SetClient(nil),
)
return client.Endpoint(), nil, nil
}
开发者ID:qband,项目名称:down,代码行数:19,代码来源:factory.go
示例11: ConcatEndpointFactory
// ConcatEndpointFactory transforms a http url into an Endpoint.
// The path of the url is reset to /concat.
func ConcatEndpointFactory(instance string) (endpoint.Endpoint, io.Closer, error) {
concatURL, err := url.Parse(instance)
if err != nil {
return nil, nil, err
}
concatURL.Path = "/concat"
client := httptransport.NewClient(
"GET",
concatURL,
server.EncodeConcatRequest,
server.DecodeConcatResponse,
httptransport.SetClient(nil),
)
return client.Endpoint(), nil, nil
}
开发者ID:qband,项目名称:down,代码行数:19,代码来源:factory.go
示例12: makeUppercaseProxy
func makeUppercaseProxy(ctx context.Context, instance string) endpoint.Endpoint {
if !strings.HasPrefix(instance, "http") {
instance = "http://" + instance
}
u, err := url.Parse(instance)
if err != nil {
panic(err)
}
if u.Path == "" {
u.Path = "/uppercase"
}
return httptransport.NewClient(
"GET",
u,
encodeRequest,
decodeUppercaseResponse,
).Endpoint()
}
开发者ID:ronincumi,项目名称:kit,代码行数:18,代码来源:proxying.go
示例13: TestHTTPClientBufferedStream
func TestHTTPClientBufferedStream(t *testing.T) {
var (
testbody = "testbody"
encode = func(context.Context, *http.Request, interface{}) error { return nil }
decode = func(_ context.Context, r *http.Response) (interface{}, error) {
return TestResponse{r.Body, ""}, nil
}
)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte(testbody))
}))
client := httptransport.NewClient(
"GET",
mustParse(server.URL),
encode,
decode,
httptransport.SetBufferedStream(true),
)
res, err := client.Endpoint()(context.Background(), struct{}{})
if err != nil {
t.Fatal(err)
}
// Check that the response was successfully decoded
response, ok := res.(TestResponse)
if !ok {
t.Fatal("response should be TestResponse")
}
// Check that response body was NOT closed
b := make([]byte, len(testbody))
_, err = response.Body.Read(b)
if want, have := io.EOF, err; have != want {
t.Fatalf("want %q, have %q", want, have)
}
if want, have := testbody, string(b); want != have {
t.Errorf("want %q, have %q", want, have)
}
}
开发者ID:subodhchhabra,项目名称:kit,代码行数:43,代码来源:client_test.go
示例14: MakeConcatEndpointFactory
// MakeConcatEndpointFactory generates a Factory that transforms an http url
// into an Endpoint.
//
// The path of the url is reset to /concat.
func MakeConcatEndpointFactory(tracer opentracing.Tracer, tracingLogger log.Logger) loadbalancer.Factory {
return func(instance string) (endpoint.Endpoint, io.Closer, error) {
concatURL, err := url.Parse(instance)
if err != nil {
return nil, nil, err
}
concatURL.Path = "/concat"
client := httptransport.NewClient(
"GET",
concatURL,
server.EncodeConcatRequest,
server.DecodeConcatResponse,
httptransport.SetClient(nil),
httptransport.SetClientBefore(kitot.ToHTTPRequest(tracer, tracingLogger)),
)
return client.Endpoint(), nil, nil
}
}
开发者ID:xiejianzheng,项目名称:goddd,代码行数:24,代码来源:factory.go
示例15: TestHTTPClient
func TestHTTPClient(t *testing.T) {
var (
encode = func(*http.Request, interface{}) error { return nil }
decode = func(*http.Response) (interface{}, error) { return struct{}{}, nil }
headers = make(chan string, 1)
headerKey = "X-Foo"
headerVal = "abcde"
)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers <- r.Header.Get(headerKey)
w.WriteHeader(http.StatusOK)
}))
client := httptransport.NewClient(
"GET",
mustParse(server.URL),
encode,
decode,
httptransport.SetClientBefore(httptransport.SetRequestHeader(headerKey, headerVal)),
)
_, err := client.Endpoint()(context.Background(), struct{}{})
if err != nil {
t.Fatal(err)
}
var have string
select {
case have = <-headers:
case <-time.After(time.Millisecond):
t.Fatalf("timeout waiting for %s", headerKey)
}
if want := headerVal; want != have {
t.Errorf("want %q, have %q", want, have)
}
}
开发者ID:cnicolov,项目名称:kit,代码行数:37,代码来源:client_test.go
示例16: TestClient
func TestClient(t *testing.T) {
type myResponse struct {
V int `json:"v"`
}
const v = 123
codec := jsoncodec.New()
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
codec.Encode(w, myResponse{v})
}))
defer server.Close()
makeResponse := func() interface{} { return &myResponse{} }
client := httptransport.NewClient(server.URL, codec, makeResponse)
resp, err := client(context.Background(), struct{}{})
if err != nil {
t.Fatal(err)
}
response, ok := resp.(*myResponse)
if !ok {
t.Fatalf("not myResponse (%s)", reflect.TypeOf(response))
}
if want, have := v, response.V; want != have {
t.Errorf("want %d, have %d", want, have)
}
}
开发者ID:jllopis,项目名称:kit,代码行数:24,代码来源:client_test.go
示例17: TestHTTPClient
func TestHTTPClient(t *testing.T) {
var (
testbody = "testbody"
encode = func(context.Context, *http.Request, interface{}) error { return nil }
decode = func(_ context.Context, r *http.Response) (interface{}, error) {
buffer := make([]byte, len(testbody))
r.Body.Read(buffer)
return TestResponse{r.Body, string(buffer)}, nil
}
headers = make(chan string, 1)
headerKey = "X-Foo"
headerVal = "abcde"
)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers <- r.Header.Get(headerKey)
w.WriteHeader(http.StatusOK)
w.Write([]byte(testbody))
}))
client := httptransport.NewClient(
"GET",
mustParse(server.URL),
encode,
decode,
httptransport.SetClientBefore(httptransport.SetRequestHeader(headerKey, headerVal)),
)
res, err := client.Endpoint()(context.Background(), struct{}{})
if err != nil {
t.Fatal(err)
}
var have string
select {
case have = <-headers:
case <-time.After(time.Millisecond):
t.Fatalf("timeout waiting for %s", headerKey)
}
// Check that Request Header was successfully received
if want := headerVal; want != have {
t.Errorf("want %q, have %q", want, have)
}
// Check that the response was successfully decoded
response, ok := res.(TestResponse)
if !ok {
t.Fatal("response should be TestResponse")
}
if want, have := testbody, response.String; want != have {
t.Errorf("want %q, have %q", want, have)
}
// Check that response body was closed
b := make([]byte, 1)
_, err = response.Body.Read(b)
if err == nil {
t.Fatal("wanted error, got none")
}
if doNotWant, have := io.EOF, err; doNotWant == have {
t.Errorf("do not want %q, have %q", doNotWant, have)
}
}
开发者ID:subodhchhabra,项目名称:kit,代码行数:63,代码来源:client_test.go
示例18: main
func main() {
// Flag domain. Note that gRPC transitively registers flags via its import
// of glog. So, we define a new flag set, to keep those domains distinct.
fs := flag.NewFlagSet("", flag.ExitOnError)
var (
debugAddr = fs.String("debug.addr", ":8000", "Address for HTTP debug/instrumentation server")
httpAddr = fs.String("http.addr", ":8001", "Address for HTTP (JSON) server")
grpcAddr = fs.String("grpc.addr", ":8002", "Address for gRPC server")
thriftAddr = fs.String("thrift.addr", ":8003", "Address for Thrift server")
thriftProtocol = fs.String("thrift.protocol", "binary", "binary, compact, json, simplejson")
thriftBufferSize = fs.Int("thrift.buffer.size", 0, "0 for unbuffered")
thriftFramed = fs.Bool("thrift.framed", false, "true to enable framing")
proxyHTTPAddr = fs.String("proxy.http.url", "", "if set, proxy requests over HTTP to this addsvc")
zipkinServiceName = fs.String("zipkin.service.name", "addsvc", "Zipkin service name")
zipkinCollectorAddr = fs.String("zipkin.collector.addr", "", "Zipkin Scribe collector address (empty will log spans)")
zipkinCollectorTimeout = fs.Duration("zipkin.collector.timeout", time.Second, "Zipkin collector timeout")
zipkinCollectorBatchSize = fs.Int("zipkin.collector.batch.size", 100, "Zipkin collector batch size")
zipkinCollectorBatchInterval = fs.Duration("zipkin.collector.batch.interval", time.Second, "Zipkin collector batch interval")
)
flag.Usage = fs.Usage // only show our flags
fs.Parse(os.Args[1:])
// `package log` domain
var logger kitlog.Logger
logger = kitlog.NewLogfmtLogger(os.Stderr)
logger = kitlog.With(logger, "ts", kitlog.DefaultTimestampUTC, "caller", kitlog.DefaultCaller)
stdlog.SetOutput(kitlog.NewStdlibAdapter(logger)) // redirect stdlib logging to us
stdlog.SetFlags(0) // flags are handled in our logger
// `package metrics` domain
requests := metrics.NewMultiCounter(
expvar.NewCounter("requests"),
statsd.NewCounter(ioutil.Discard, "requests_total", time.Second),
prometheus.NewCounter(stdprometheus.CounterOpts{
Namespace: "addsvc",
Subsystem: "add",
Name: "requests_total",
Help: "Total number of received requests.",
}, []string{}),
)
duration := metrics.NewMultiHistogram(
expvar.NewHistogram("duration_nanoseconds_total", 0, 100000000, 3),
statsd.NewHistogram(ioutil.Discard, "duration_nanoseconds_total", time.Second),
prometheus.NewSummary(stdprometheus.SummaryOpts{
Namespace: "addsvc",
Subsystem: "add",
Name: "duration_nanoseconds_total",
Help: "Total nanoseconds spend serving requests.",
}, []string{}),
)
// `package tracing` domain
zipkinHostPort := "localhost:1234" // TODO Zipkin makes overly simple assumptions about services
var zipkinCollector zipkin.Collector = loggingCollector{logger}
if *zipkinCollectorAddr != "" {
var err error
if zipkinCollector, err = zipkin.NewScribeCollector(
*zipkinCollectorAddr,
*zipkinCollectorTimeout,
*zipkinCollectorBatchSize,
*zipkinCollectorBatchInterval,
); err != nil {
logger.Log("err", err)
os.Exit(1)
}
}
zipkinMethodName := "add"
zipkinSpanFunc := zipkin.MakeNewSpanFunc(zipkinHostPort, *zipkinServiceName, zipkinMethodName)
zipkin.Log.Swap(logger) // log diagnostic/error details
// Our business and operational domain
var a Add = pureAdd
if *proxyHTTPAddr != "" {
codec := jsoncodec.New()
makeResponse := func() interface{} { return &addResponse{} }
var e endpoint.Endpoint
e = httptransport.NewClient(*proxyHTTPAddr, codec, makeResponse, httptransport.ClientBefore(zipkin.ToRequest(zipkinSpanFunc)))
e = zipkin.AnnotateClient(zipkinSpanFunc, zipkinCollector)(e)
a = proxyAdd(e, logger)
}
a = logging(logger)(a)
// Server domain
var e endpoint.Endpoint
e = makeEndpoint(a)
e = zipkin.AnnotateServer(zipkinSpanFunc, zipkinCollector)(e)
// Mechanical stuff
rand.Seed(time.Now().UnixNano())
root := context.Background()
errc := make(chan error)
go func() {
errc <- interrupt()
}()
//.........这里部分代码省略.........
开发者ID:jllopis,项目名称:kit,代码行数:101,代码来源:main.go
注:本文中的github.com/go-kit/kit/transport/http.NewClient函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论