func (r *rpcClient) stream(ctx context.Context, address string, request Request, responseChan interface{}) (Streamer, error) { msg := &transport.Message{ Header: make(map[string]string), } md, ok := c.GetMetadata(ctx) if ok { for k, v := range md { msg.Header[k] = v } } msg.Header["Content-Type"] = request.ContentType() c, err := r.opts.transport.Dial(address, transport.WithStream()) if err != nil { return nil, errors.InternalServerError("go.micro.client", fmt.Sprintf("Error sending request: %v", err)) } client := rpc.NewClientWithCodec(newRpcPlusCodec(msg, c)) call := client.StreamGo(request.Method(), request.Request(), responseChan) return &rpcStream{ request: request, call: call, client: client, }, nil }
func (r *rpcClient) Publish(ctx context.Context, p Publication) error { md, ok := c.GetMetadata(ctx) if !ok { md = make(map[string]string) } md["Content-Type"] = p.ContentType() // encode message body var body []byte switch p.ContentType() { case "application/octet-stream": b, err := proto.Marshal(p.Message().(proto.Message)) if err != nil { return err } body = b case "application/json": b, err := json.Marshal(p.Message()) if err != nil { return err } body = b } r.once.Do(func() { r.opts.broker.Connect() }) return r.opts.broker.Publish(p.Topic(), &broker.Message{ Header: md, Body: body, }) }
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { // Endpoint construction var ep endpoint.Endpoint ep = func() error { md, _ := c.GetMetadata(ctx) log.Infof("Received Example.Call request with metadata: %v", md) rsp.Msg = server.Config().Id() + ": Hello " + req.Name return nil } // Including middlewares ep = ratelimit.NewTokenBucketLimiter(testBucket)(ep) ep = circuitbreaker.Hystrix("test_command", ep, nil, 0, 50, 1000, 0, 0)(ep) // Excuting ep() return nil }
func (r *rpcClient) call(ctx context.Context, address string, request Request, response interface{}) error { msg := &transport.Message{ Header: make(map[string]string), } md, ok := c.GetMetadata(ctx) if ok { for k, v := range md { msg.Header[k] = v } } msg.Header["Content-Type"] = request.ContentType() c, err := r.opts.transport.Dial(address) if err != nil { return errors.InternalServerError("go.micro.client", fmt.Sprintf("Error sending request: %v", err)) } client := rpc.NewClientWithCodec(newRpcPlusCodec(msg, c)) return client.Call(ctx, request.Method(), request.Request(), response) }
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { md, _ := c.GetMetadata(ctx) log.Infof("Received Example.Call request with metadata: %v", md) rsp.Msg = server.Config().Id() + ": Hello " + req.Name return nil }