client

package
v3.10.82 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2024 License: Apache-2.0 Imports: 24 Imported by: 41

Documentation

Overview

Package client is an interface for an RPC client

Index

Constants

This section is empty.

Variables

View Source
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
)
View Source
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

func BackoffExp(_ context.Context, _ Request, attempts int) (time.Duration, error)

BackoffExp using exponential backoff func

func LookupRoute

func LookupRoute(_ context.Context, req Request, opts CallOptions) ([]string, error)

LookupRoute for a request using the router and then choose one using the selector

func NewContext

func NewContext(ctx context.Context, c Client) context.Context

NewContext put client in context

func RetryAlways

func RetryAlways(ctx context.Context, req Request, retryCount int, err error) (bool, error)

RetryAlways always retry on error

func RetryNever

func RetryNever(ctx context.Context, req Request, retryCount int, err error) (bool, error)

RetryNever never retry on error

func RetryOnError

func RetryOnError(_ context.Context, _ Request, _ int, err error) (bool, error)

RetryOnError retries a request on a 500 or 408 (timeout) error

Types

type BackoffFunc

type BackoffFunc func(ctx context.Context, req Request, attempts int) (time.Duration, error)

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 WithContentType

func WithContentType(ct string) CallOption

WithContentType specifies call content type

func WithContextDialer added in v3.9.12

func WithContextDialer(fn func(context.Context, string) (net.Conn, error)) CallOption

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
	// 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

type CallWrapper func(CallFunc) CallFunc

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

func FromContext(ctx context.Context) (Client, bool)

FromContext get client from context

func NewClient

func NewClient(opts ...Option) Client

NewClient returns new noop client

func NewClientCallOptions

func NewClientCallOptions(c Client, opts ...CallOption) Client

NewClientCallOptions add CallOption to every call

type FuncBatchPublish added in v3.10.63

type FuncBatchPublish func(ctx context.Context, msg []Message, opts ...PublishOption) error

type FuncCall added in v3.10.63

type FuncCall func(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error

type FuncPublish added in v3.10.63

type FuncPublish func(ctx context.Context, msg Message, opts ...PublishOption) error

type FuncStream added in v3.10.63

type FuncStream func(ctx context.Context, req Request, opts ...CallOption) (Stream, error)

type HookBatchPublish added in v3.10.63

type HookBatchPublish func(next FuncBatchPublish) FuncBatchPublish

type HookCall added in v3.10.63

type HookCall func(next FuncCall) FuncCall

type HookPublish added in v3.10.63

type HookPublish func(next FuncPublish) FuncPublish

type HookStream added in v3.10.63

type HookStream func(next FuncStream) FuncStream

type LookupFunc

type LookupFunc func(context.Context, Request, CallOptions) ([]string, error)

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 Broker

func Broker(b broker.Broker) Option

Broker to be used for pub/sub

func Codec

func Codec(contentType string, c codec.Codec) Option

Codec to be used to encode/decode requests for a given content type

func ContentType

func ContentType(ct string) Option

ContentType used by default if not specified

func Context

func Context(ctx context.Context) Option

Context pass context to client

func ContextDialer added in v3.9.12

func ContextDialer(fn func(context.Context, string) (net.Conn, error)) Option

ContextDialer pass ContextDialer to client

func DialTimeout

func DialTimeout(d time.Duration) Option

DialTimeout sets the dial timeout

func Hooks added in v3.10.63

func Hooks(h ...options.Hook) Option

Hooks sets hook runs before action

func Logger

func Logger(l logger.Logger) Option

Logger to be used for log mesages

func Lookup

func Lookup(l LookupFunc) Option

Lookup sets the lookup function to use for resolving service names

func Meter

func Meter(m meter.Meter) Option

Meter to be used for metrics

func Name

func Name(n string) Option

Name sets the client name

func PoolSize

func PoolSize(d int) Option

PoolSize sets the connection pool size

func PoolTTL

func PoolTTL(d time.Duration) Option

PoolTTL sets the connection pool ttl

func Proxy

func Proxy(addr string) Option

Proxy sets the proxy address

func Register

func Register(r register.Register) Option

Register sets the routers register

func RequestTimeout

func RequestTimeout(d time.Duration) Option

RequestTimeout is the request timeout.

func Retries

func Retries(i int) Option

Retries sets the retry count when making the request.

func Retry

func Retry(fn RetryFunc) Option

Retry sets the retry function to be used when re-trying.

func Router

func Router(r router.Router) Option

Router is used to lookup routes for a service

func Selector

func Selector(s selector.Selector) Option

Selector is used to select a route

func SetOption

func SetOption(k, v interface{}) Option

SetOption returns a function to setup a context with given value

func StreamTimeout

func StreamTimeout(d time.Duration) Option

StreamTimeout sets the stream timeout

func TLSConfig

func TLSConfig(t *tls.Config) Option

TLSConfig specifies a *tls.Config

func Tracer

func Tracer(t tracer.Tracer) Option

Tracer to be used for tracing

func Transport

func Transport(t transport.Transport) Option

Transport to use for communication e.g http, rabbitmq, etc

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)
	// Hooks can be run before broker Publish/BatchPublish and
	// Subscribe/BatchSubscribe methods
	Hooks options.Hooks
}

Options holds client options

func NewOptions

func NewOptions(opts ...Option) Options

NewOptions creates new options struct

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

type RetryFunc func(ctx context.Context, req Request, retryCount int, err error) (bool, error)

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

func RetryOnErrors(codes ...int32) RetryFunc

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

type StreamWrapper func(Stream) Stream

StreamWrapper wraps a Stream and returns the equivalent

type Wrapper

type Wrapper func(Client) Client

Wrapper wraps a client and returns a client

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL