func Call(ctx context.Context, req Request, rsp interface{}) error {
	return DefaultClient.Call(ctx, req, rsp)
}
Call performs a request
package client
import (
	"context"
	"time"
	"github.com/micro/micro/v3/util/codec"
)
var (
	DefaultClient Client
)
type Client interface {
	Init(...Option) error
	Options() Options
	NewMessage(topic string, msg interface{}, opts ...MessageOption) Message
	NewRequest(service, endpoint string, req interface{}, reqOpts ...RequestOption) Request
	Call(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error
	Stream(ctx context.Context, req Request, opts ...CallOption) (Stream, error)
	Publish(ctx context.Context, msg Message, opts ...PublishOption) error
	String() string
}
type Message interface {
	Topic() string
	Payload() interface{}
	ContentType() string
}
type Request interface {
	Service() string
	Method() string
	Endpoint() string
	ContentType() string
	Body() interface{}
	Codec() codec.Writer
	Stream() bool
}
type Response interface {
	Codec() codec.Reader
	Header() map[string]string
	Read() ([]byte, error)
}
type Stream interface {
	Context() context.Context
	Request() Request
	Response() Response
	Send(interface{}) error
	Recv(interface{}) error
	Error() error
	Close() error
}
type Option func(*Options)
type CallOption func(*CallOptions)
type PublishOption func(*PublishOptions)
type MessageOption func(*MessageOptions)
type RequestOption func(*RequestOptions)
var (
	DefaultBackoff = exponentialBackoff
	DefaultRetry = RetryOnConnectFailure
	DefaultRetries = 1
	DefaultRequestTimeout = time.Second * 5
	DefaultPoolSize = 100
	DefaultPoolTTL = time.Minute
)
func NewMessage(topic string, msg interface{}) Message {
	return DefaultClient.NewMessage(topic, msg)
}
func NewRequest(service, endpoint string, req interface{}) Request {
	return DefaultClient.NewRequest(service, endpoint, req)
}