Documentation ¶
Overview ¶
Package client is an interface for an RPC client
Index ¶
- Variables
- func BackoffExp(_ context.Context, _ Request, attempts int) (time.Duration, error)
- func LookupRoute(_ context.Context, req Request, opts CallOptions) ([]string, error)
- func NewContext(ctx context.Context, c Client) context.Context
- func RetryAlways(ctx context.Context, req Request, retryCount int, err error) (bool, error)
- func RetryNever(ctx context.Context, req Request, retryCount int, err error) (bool, error)
- func RetryOnError(_ context.Context, _ Request, _ int, err error) (bool, error)
- type BackoffFunc
- type CallFunc
- type CallOption
- func SetCallOption(k, v interface{}) CallOption
- func WithAddress(a ...string) CallOption
- func WithAuthToken(t string) CallOption
- func WithBackoff(fn BackoffFunc) CallOption
- func WithCallWrapper(cw ...CallWrapper) CallOption
- func WithContentType(ct string) CallOption
- func WithContextDialer(fn func(context.Context, string) (net.Conn, error)) CallOption
- func WithDialTimeout(d time.Duration) CallOption
- func WithNetwork(n string) CallOption
- func WithRequestMetadata(md metadata.Metadata) CallOption
- func WithRequestTimeout(d time.Duration) CallOption
- func WithResponseMetadata(md *metadata.Metadata) CallOption
- func WithRetries(i int) CallOption
- func WithRetry(fn RetryFunc) CallOption
- func WithRouter(r router.Router) CallOption
- func WithSelectOptions(sops ...selector.SelectOption) CallOption
- func WithSelector(s selector.Selector) CallOption
- func WithStreamTimeout(d time.Duration) CallOption
- type CallOptions
- type CallWrapper
- type Client
- type LookupFunc
- type Message
- type MessageOption
- type MessageOptions
- type Option
- func Backoff(fn BackoffFunc) Option
- func Broker(b broker.Broker) Option
- func Codec(contentType string, c codec.Codec) Option
- func ContentType(ct string) Option
- func Context(ctx context.Context) Option
- func ContextDialer(fn func(context.Context, string) (net.Conn, error)) Option
- func DialTimeout(d time.Duration) Option
- func Logger(l logger.Logger) Option
- func Lookup(l LookupFunc) Option
- func Meter(m meter.Meter) Option
- func Name(n string) Option
- func PoolSize(d int) Option
- func PoolTTL(d time.Duration) Option
- func Proxy(addr string) Option
- func Register(r register.Register) Option
- func RequestTimeout(d time.Duration) Option
- func Retries(i int) Option
- func Retry(fn RetryFunc) Option
- func Router(r router.Router) Option
- func Selector(s selector.Selector) Option
- func SetOption(k, v interface{}) Option
- func StreamTimeout(d time.Duration) Option
- func TLSConfig(t *tls.Config) Option
- func Tracer(t tracer.Tracer) Option
- func Transport(t transport.Transport) Option
- func Wrap(w Wrapper) Option
- func WrapCall(cw ...CallWrapper) Option
- type Options
- type PublishOption
- type PublishOptions
- type Request
- type RequestOption
- type RequestOptions
- type Response
- type RetryFunc
- type Stream
- type StreamWrapper
- type Wrapper
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultClient is the global default client DefaultClient = NewClient() // DefaultContentType is the default content-type if not specified DefaultContentType = "" // DefaultBackoff is the default backoff function for retries (minimum 10 millisecond and maximum 5 second) DefaultBackoff = BackoffInterval(10*time.Millisecond, 5*time.Second) // DefaultRetry is the default check-for-retry function for retries DefaultRetry = RetryNever // DefaultRetries is the default number of times a request is tried DefaultRetries = 0 // DefaultRequestTimeout is the default request timeout DefaultRequestTimeout = time.Second * 5 // DefaultPoolSize sets the connection pool size DefaultPoolSize = 100 // DefaultPoolTTL sets the connection pool ttl DefaultPoolTTL = time.Minute )
var DefaultCodecs = map[string]codec.Codec{ "application/octet-stream": codec.NewCodec(), }
DefaultCodecs will be used to encode/decode data
Functions ¶
func BackoffExp ¶ added in v3.9.4
BackoffExp using exponential backoff func
func LookupRoute ¶
LookupRoute for a request using the router and then choose one using the selector
func NewContext ¶
NewContext put client in context
func RetryAlways ¶
RetryAlways always retry on error
func RetryNever ¶
RetryNever never retry on error
Types ¶
type BackoffFunc ¶
BackoffFunc is the backoff call func
func BackoffInterval ¶ added in v3.9.4
func BackoffInterval(min time.Duration, max time.Duration) BackoffFunc
BackoffInterval specifies randomization interval for backoff func
type CallFunc ¶
type CallFunc func(ctx context.Context, addr string, req Request, rsp interface{}, opts CallOptions) error
CallFunc represents the individual call func
type CallOption ¶
type CallOption func(*CallOptions)
CallOption used by Call or Stream
func SetCallOption ¶
func SetCallOption(k, v interface{}) CallOption
SetCallOption returns a function to setup a context with given value
func WithAddress ¶
func WithAddress(a ...string) CallOption
WithAddress sets the remote addresses to use rather than using service discovery
func WithAuthToken ¶
func WithAuthToken(t string) CallOption
WithAuthToken is a CallOption which overrides the authorization header with the services own auth token
func WithBackoff ¶
func WithBackoff(fn BackoffFunc) CallOption
WithBackoff is a CallOption which overrides that which set in Options.CallOptions
func WithCallWrapper ¶
func WithCallWrapper(cw ...CallWrapper) CallOption
WithCallWrapper is a CallOption which adds to the existing CallFunc wrappers
func WithContentType ¶
func WithContentType(ct string) CallOption
WithContentType specifies call content type
func WithContextDialer ¶ added in v3.9.12
WithContextDialer pass ContextDialer to client call
func WithDialTimeout ¶
func WithDialTimeout(d time.Duration) CallOption
WithDialTimeout is a CallOption which overrides that which set in Options.CallOptions
func WithNetwork ¶
func WithNetwork(n string) CallOption
WithNetwork is a CallOption which sets the network attribute
func WithRequestMetadata ¶ added in v3.9.12
func WithRequestMetadata(md metadata.Metadata) CallOption
WithRequestMetadata is a CallOption which adds metadata.Metadata to Options.CallOptions
func WithRequestTimeout ¶
func WithRequestTimeout(d time.Duration) CallOption
WithRequestTimeout is a CallOption which overrides that which set in Options.CallOptions
func WithResponseMetadata ¶ added in v3.9.12
func WithResponseMetadata(md *metadata.Metadata) CallOption
WithResponseMetadata is a CallOption which adds metadata.Metadata to Options.CallOptions
func WithRetries ¶
func WithRetries(i int) CallOption
WithRetries is a CallOption which overrides that which set in Options.CallOptions
func WithRetry ¶
func WithRetry(fn RetryFunc) CallOption
WithRetry is a CallOption which overrides that which set in Options.CallOptions
func WithRouter ¶
func WithRouter(r router.Router) CallOption
WithRouter sets the router to use for this call
func WithSelectOptions ¶
func WithSelectOptions(sops ...selector.SelectOption) CallOption
WithSelectOptions sets the options to pass to the selector for this call
func WithSelector ¶
func WithSelector(s selector.Selector) CallOption
WithSelector sets the selector to use for this call
func WithStreamTimeout ¶
func WithStreamTimeout(d time.Duration) CallOption
WithStreamTimeout sets the stream timeout
type CallOptions ¶
type CallOptions struct { // Selector selects addr Selector selector.Selector // Context used for deadline Context context.Context // Router used for route Router router.Router // Retry func used for retries Retry RetryFunc // Backoff func used for backoff when retry Backoff BackoffFunc // Network name Network string // Content-Type ContentType string // AuthToken string AuthToken string // Address specifies static addr list Address []string // SelectOptions selector options SelectOptions []selector.SelectOption // CallWrappers call wrappers CallWrappers []CallWrapper // StreamTimeout stream timeout StreamTimeout time.Duration // RequestTimeout request timeout RequestTimeout time.Duration // RequestMetadata holds additional metadata for call RequestMetadata metadata.Metadata // ResponseMetadata holds additional metadata from call ResponseMetadata *metadata.Metadata // DialTimeout dial timeout DialTimeout time.Duration // Retries specifies retries num Retries int // ContextDialer used to connect ContextDialer func(context.Context, string) (net.Conn, error) }
CallOptions holds client call options
func NewCallOptions ¶
func NewCallOptions(opts ...CallOption) CallOptions
NewCallOptions creates new call options struct
type CallWrapper ¶
CallWrapper is a low level wrapper for the CallFunc
type Client ¶
type Client interface { Name() string Init(opts ...Option) error Options() Options NewMessage(topic string, msg interface{}, opts ...MessageOption) Message NewRequest(service string, endpoint string, req interface{}, opts ...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 BatchPublish(ctx context.Context, msg []Message, opts ...PublishOption) error String() string }
Client is the interface used to make requests to services. It supports Request/Response via Transport and Publishing via the Broker. It also supports bidirectional streaming of requests.
func FromContext ¶
FromContext get client from context
func NewClientCallOptions ¶
func NewClientCallOptions(c Client, opts ...CallOption) Client
NewClientCallOptions add CallOption to every call
type LookupFunc ¶
LookupFunc is used to lookup routes for a service
type Message ¶
type Message interface { Topic() string Payload() interface{} ContentType() string Metadata() metadata.Metadata }
Message is the interface for publishing asynchronously
type MessageOption ¶
type MessageOption func(*MessageOptions)
MessageOption used by NewMessage
func MessageContentType ¶
func MessageContentType(ct string) MessageOption
MessageContentType sets the message content type
func MessageMetadata ¶ added in v3.8.12
func MessageMetadata(k, v string) MessageOption
MessageMetadata sets the message metadata
func WithMessageContentType ¶
func WithMessageContentType(ct string) MessageOption
WithMessageContentType sets the message content type Deprecated
type MessageOptions ¶
type MessageOptions struct { // Metadata additional metadata Metadata metadata.Metadata // ContentType specify content-type of message // deprecated ContentType string }
MessageOptions holds client message options
func NewMessageOptions ¶
func NewMessageOptions(opts ...MessageOption) MessageOptions
NewMessageOptions creates message options struct
type Option ¶
type Option func(*Options)
Option used by the Client
func Backoff ¶
func Backoff(fn BackoffFunc) Option
Backoff is used to set the backoff function used when retrying Calls
func ContextDialer ¶ added in v3.9.12
ContextDialer pass ContextDialer to client
func Lookup ¶
func Lookup(l LookupFunc) Option
Lookup sets the lookup function to use for resolving service names
func RequestTimeout ¶
RequestTimeout is the request timeout.
func SetOption ¶
func SetOption(k, v interface{}) Option
SetOption returns a function to setup a context with given value
func StreamTimeout ¶
StreamTimeout sets the stream timeout
func WrapCall ¶
func WrapCall(cw ...CallWrapper) Option
WrapCall adds a wrapper to the list of CallFunc wrappers
type Options ¶
type Options struct { // Transport used for transfer messages Transport transport.Transport // Selector used to select needed address Selector selector.Selector // Logger used to log messages Logger logger.Logger // Tracer used for tracing Tracer tracer.Tracer // Broker used to publish messages Broker broker.Broker // Meter used for metrics Meter meter.Meter // Context is used for external options Context context.Context // Router used to get route Router router.Router // TLSConfig specifies tls.Config for secure connection TLSConfig *tls.Config // Codecs map Codecs map[string]codec.Codec // Lookup func used to get destination addr Lookup LookupFunc // Proxy is used for proxy requests Proxy string // ContentType is used to select codec ContentType string // Name is the client name Name string // Wrappers contains wrappers Wrappers []Wrapper // CallOptions contains default CallOptions CallOptions CallOptions // PoolSize connection pool size PoolSize int // PoolTTL connection pool ttl PoolTTL time.Duration // ContextDialer used to connect ContextDialer func(context.Context, string) (net.Conn, error) }
Options holds client options
type PublishOption ¶
type PublishOption func(*PublishOptions)
PublishOption used by Publish
func PublishBodyOnly ¶
func PublishBodyOnly(b bool) PublishOption
PublishBodyOnly publish only message body
func PublishContext ¶
func PublishContext(ctx context.Context) PublishOption
PublishContext sets the context in publish options
func PublishExchange ¶
func PublishExchange(e string) PublishOption
PublishExchange sets the exchange to route a message through
func SetPublishOption ¶
func SetPublishOption(k, v interface{}) PublishOption
SetPublishOption returns a function to setup a context with given value
func WithBodyOnly ¶
func WithBodyOnly(b bool) PublishOption
WithBodyOnly publish only message body DERECATED
func WithExchange ¶
func WithExchange(e string) PublishOption
WithExchange sets the exchange to route a message through Deprecated
type PublishOptions ¶
type PublishOptions struct { // Context used for external options Context context.Context // Exchange topic exchange name Exchange string // BodyOnly will publish only message body BodyOnly bool }
PublishOptions holds publish options
func NewPublishOptions ¶
func NewPublishOptions(opts ...PublishOption) PublishOptions
NewPublishOptions create new PublishOptions struct from option
type Request ¶
type Request interface { // The service to call Service() string // The action to take Method() string // The endpoint to invoke Endpoint() string // The content type ContentType() string // The unencoded request body Body() interface{} // Write to the encoded request writer. This is nil before a call is made Codec() codec.Codec // indicates whether the request will be a streaming one rather than unary Stream() bool }
Request is the interface for a synchronous request used by Call or Stream
type RequestOption ¶
type RequestOption func(*RequestOptions)
RequestOption used by NewRequest
func RequestContentType ¶
func RequestContentType(ct string) RequestOption
RequestContentType specifies request content type
func StreamingRequest ¶
func StreamingRequest(b bool) RequestOption
StreamingRequest specifies that request is streaming
type RequestOptions ¶
type RequestOptions struct { // Context used for external options Context context.Context // ContentType specify content-type of message ContentType string // Stream flag Stream bool }
RequestOptions holds client request options
func NewRequestOptions ¶
func NewRequestOptions(opts ...RequestOption) RequestOptions
NewRequestOptions creates new RequestOptions struct
type Response ¶
type Response interface { // Read the response Codec() codec.Codec // Header data Header() metadata.Metadata // Read the undecoded response Read() ([]byte, error) }
Response is the response received from a service
type RetryFunc ¶
RetryFunc that returning either false or a non-nil error will result in the call not being retried
func RetryOnErrors ¶ added in v3.9.4
RetryOnErrors retries a request on specified error codes
type Stream ¶
type Stream interface { // Context for the stream Context() context.Context // The request made Request() Request // The response read Response() Response // Send will encode and send a request Send(msg interface{}) error // Recv will decode and read a response Recv(msg interface{}) error // SendMsg will encode and send a request SendMsg(msg interface{}) error // RecvMsg will decode and read a response RecvMsg(msg interface{}) error // Error returns the stream error Error() error // Close closes the stream Close() error // CloseSend closes the send direction of the stream CloseSend() error }
Stream is the interface for a bidirectional synchronous stream
type StreamWrapper ¶
StreamWrapper wraps a Stream and returns the equivalent