Package client
Overview ▹
Index ▹
Variables
var (
// DefaultClient is a default client to use out of the box
DefaultClient Client = newRpcClient()
// DefaultBackoff is the default backoff function for retries
DefaultBackoff = exponentialBackoff
// DefaultRetry is the default check-for-retry function for retries
DefaultRetry = alwaysRetry
// DefaultRetries is the default number of times a request is tried
DefaultRetries = 1
// DefaultRequestTimeout is the default request timeout
DefaultRequestTimeout = time.Second * 5
// DefaultPoolSize sets the connection pool size
DefaultPoolSize = 0
// DefaultPoolTTL sets the connection pool ttl
DefaultPoolTTL = time.Minute
)
func Call ¶
func Call(ctx context.Context, request Request, response interface{}, opts ...CallOption) error
Makes a synchronous call to a service using the default client
func CallRemote ¶
func CallRemote(ctx context.Context, address string, request Request, response interface{}, opts ...CallOption) error
Makes a synchronous call to the specified address using the default client
func NewContext ¶
func NewContext(ctx context.Context, c Client) context.Context
func Publish ¶
func Publish(ctx context.Context, p Publication) error
Publishes a publication using the default client. Using the underlying broker set within the options.
func String ¶
func String() string
type BackoffFunc ¶
type BackoffFunc func(ctx context.Context, req Request, attempts int) (time.Duration, error)
type CallFunc ¶
CallFunc represents the individual call func
type CallFunc func(ctx context.Context, address string, req Request, rsp interface{}, opts CallOptions) error
type CallOption ¶
CallOption used by Call or Stream
type CallOption func(*CallOptions)
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 WithDialTimeout ¶
func WithDialTimeout(d time.Duration) CallOption
WithDialTimeout is a CallOption which overrides that which set in Options.CallOptions
func WithRequestTimeout ¶
func WithRequestTimeout(d time.Duration) CallOption
WithRequestTimeout is a CallOption which overrides that which set in 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 WithSelectOption ¶
func WithSelectOption(so ...selector.SelectOption) CallOption
type CallOptions ¶
type CallOptions struct {
SelectOptions []selector.SelectOption
// Backoff func
Backoff BackoffFunc
// Check if retriable func
Retry RetryFunc
// Transport Dial Timeout
DialTimeout time.Duration
// Number of Call attempts
Retries int
// Request/Response timeout
RequestTimeout time.Duration
// Middleware for low level call func
CallWrappers []CallWrapper
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
}
type CallWrapper ¶
CallWrapper is a low level wrapper for the CallFunc
type CallWrapper func(CallFunc) CallFunc
type Client ¶
Client is the interface used to make requests to services. It supports Request/Response via Transport and Publishing via the Broker. It also supports bidiectional streaming of requests.
type Client interface {
Init(...Option) error
Options() Options
NewPublication(topic string, msg interface{}) Publication
NewRequest(service, method string, req interface{}, reqOpts ...RequestOption) Request
NewProtoRequest(service, method string, req interface{}, reqOpts ...RequestOption) Request
NewJsonRequest(service, method string, req interface{}, reqOpts ...RequestOption) Request
Call(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error
CallRemote(ctx context.Context, addr string, req Request, rsp interface{}, opts ...CallOption) error
Stream(ctx context.Context, req Request, opts ...CallOption) (Streamer, error)
StreamRemote(ctx context.Context, addr string, req Request, opts ...CallOption) (Streamer, error)
Publish(ctx context.Context, p Publication, opts ...PublishOption) error
String() string
}
func FromContext ¶
func FromContext(ctx context.Context) (Client, bool)
func NewClient ¶
func NewClient(opt ...Option) Client
Creates a new client with the options passed in
type Option ¶
Option used by the Client
type Option func(*Options)
func Backoff ¶
func Backoff(fn BackoffFunc) Option
Backoff is used to set the backoff function used when retrying Calls
func Broker ¶
func Broker(b broker.Broker) Option
Broker to be used for pub/sub
func Codec ¶
func Codec(contentType string, c codec.NewCodec) Option
Codec to be used to encode/decode requests for a given content type
func ContentType ¶
func ContentType(ct string) Option
Default content type of the client
func DialTimeout ¶
func DialTimeout(d time.Duration) Option
Transport dial timeout
func PoolSize ¶
func PoolSize(d int) Option
PoolSize sets the connection pool size
func PoolTTL ¶
func PoolTTL(d time.Duration) Option
PoolSize sets the connection pool size
func Registry ¶
func Registry(r registry.Registry) Option
Registry to find nodes for a given service
func RequestTimeout ¶
func RequestTimeout(d time.Duration) Option
The request timeout. Should this be a Call Option?
func Retries ¶
func Retries(i int) Option
Number of retries when making the request. Should this be a Call Option?
func Retry ¶
func Retry(fn RetryFunc) Option
Retry sets the retry function to be used when re-trying.
func Selector ¶
func Selector(s selector.Selector) Option
Select is used to select a node to route a request to
func Transport ¶
func Transport(t transport.Transport) Option
Transport to use for communication e.g http, rabbitmq, etc
func Wrap ¶
func Wrap(w Wrapper) Option
Adds a Wrapper to a list of options passed into the client
func WrapCall ¶
func WrapCall(cw ...CallWrapper) Option
Adds a Wrapper to the list of CallFunc wrappers
type Options ¶
type Options struct {
// Used to select codec
ContentType string
// Plugged interfaces
Broker broker.Broker
Codecs map[string]codec.NewCodec
Registry registry.Registry
Selector selector.Selector
Transport transport.Transport
// Connection Pool
PoolSize int
PoolTTL time.Duration
// Middleware for client
Wrappers []Wrapper
// Default Call Options
CallOptions CallOptions
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
}
type Publication ¶
Publication is the interface for a message published asynchronously
type Publication interface {
Topic() string
Message() interface{}
ContentType() string
}
func NewPublication ¶
func NewPublication(topic string, message interface{}) Publication
Creates a new publication using the default client
type PublishOption ¶
PublishOption used by Publish
type PublishOption func(*PublishOptions)
type PublishOptions ¶
type PublishOptions struct {
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
}
type Request ¶
Request is the interface for a synchronous request used by Call or Stream
type Request interface {
Service() string
Method() string
ContentType() string
Request() interface{}
// indicates whether the request will be a streaming one rather than unary
Stream() bool
}
func NewJsonRequest ¶
func NewJsonRequest(service, method string, request interface{}, reqOpts ...RequestOption) Request
Creates a new json request using the default client
func NewProtoRequest ¶
func NewProtoRequest(service, method string, request interface{}, reqOpts ...RequestOption) Request
Creates a new protobuf request using the default client
func NewRequest ¶
func NewRequest(service, method string, request interface{}, reqOpts ...RequestOption) Request
Creates a new request using the default client. Content Type will be set to the default within options and use the appropriate codec
type RequestOption ¶
RequestOption used by NewRequest
type RequestOption func(*RequestOptions)
func StreamingRequest ¶
func StreamingRequest() RequestOption
type RequestOptions ¶
type RequestOptions struct {
Stream bool
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
}
type RetryFunc ¶
note that returning either false or a non-nil error will result in the call not being retried
type RetryFunc func(ctx context.Context, req Request, retryCount int, err error) (bool, error)
type StreamWrapper ¶
StreamWrapper wraps a Stream and returns the equivalent
type StreamWrapper func(Streamer) Streamer
type Streamer ¶
Streamer is the inteface for a bidirectional synchronous stream
type Streamer interface {
Context() context.Context
Request() Request
Send(interface{}) error
Recv(interface{}) error
Error() error
Close() error
}
func Stream ¶
func Stream(ctx context.Context, request Request, opts ...CallOption) (Streamer, error)
Creates a streaming connection with a service and returns responses on the channel passed in. It's up to the user to close the streamer.
func StreamRemote ¶
func StreamRemote(ctx context.Context, address string, request Request, opts ...CallOption) (Streamer, error)
Creates a streaming connection to the address specified.
type Wrapper ¶
Wrapper wraps a client and returns a client
type Wrapper func(Client) Client
ActiveGo 1.8