client

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2023 License: MIT, Apache-2.0 Imports: 7 Imported by: 1

Documentation

Overview

Package client is an interface for an RPC client

Index

Constants

View Source
const DefaultContentType = "application/json"

Variables

View Source
var (

	// DefaultBackoff is the default backoff function for retries
	DefaultBackoff = exponentialBackoff
	// DefaultRetry is the default check-for-retry function for retries
	DefaultRetry = RetryOnError
	// 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 = 100
	// DefaultPoolTTL sets the connection pool ttl
	DefaultPoolTTL = time.Minute

	// DefaultDialTimeout is the default dial timeout
	DefaultDialTimeout = time.Second * 5
)

Functions

func NewContext

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

func RetryAlways

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

RetryAlways always retry on error

func RetryOnError

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

RetryOnError retries a request on a 500 or timeout error

Types

type BackoffFunc

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

type CallFunc

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

CallFunc represents the individual call func

type CallOption

type CallOption func(*CallOptions)

CallOption used by Call

func WithAddress

func WithAddress(a ...string) CallOption

WithAddress sets the remote addresses to use rather than using service discovery

func WithAsync added in v0.0.9

func WithAsync() CallOption

WithAsync is a CallOption which overrides that which set in Options.CallOptions

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

type CallOptions

type CallOptions struct {
	// Address of remote hosts
	Address []string
	// 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
	// Async
	Async bool

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

type CallWrapper func(CallFunc) CallFunc

CallWrapper is a low level wrapper for the CallFunc

type Client

type Client interface {
	Init(...Option) error
	Options() Options
	SetAService() error
	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
	Publish(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)

func NewFakeClient added in v0.0.3

func NewFakeClient(opt ...Option) Client

type Message

type Message interface {
	Topic() string
	Payload() interface{}
	ContentType() string
}

Message is the interface for publishing asynchronously

type MessageOption

type MessageOption func(*MessageOptions)

MessageOption used by NewMessage

type MessageOptions

type MessageOptions struct {
	ContentType string
}

type Option

type Option func(*Options)

Option used by the Client

func Broker

func Broker() Option

Broker to be used for pub/sub

func Selector

func Selector() Option

Select is used to select a node to route a request to

func ServiceAddr

func ServiceAddr(addr string) Option

ServiceAddr the default service address

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
	Codecs map[string]codec.NewCodec

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

func NewOptions

func NewOptions(options ...Option) Options

type PublishOption

type PublishOption func(*PublishOptions)

PublishOption used by Publish

type PublishOptions

type PublishOptions struct {
	// Exchange is the routing exchange for the message
	Exchange string
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

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.Writer
}

Request is the interface for a synchronous request used by Call or Stream

type RequestOption

type RequestOption func(*RequestOptions)

RequestOption used by NewRequest

func WithContentType

func WithContentType(ct string) RequestOption

type RequestOptions

type RequestOptions struct {
	ContentType string
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

type Response

type Response interface {
	// Read the response
	Codec() codec.Reader
	// read the header
	Header() map[string]string
	// 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)

note that returning either false or a non-nil error will result in the call not being retried

type Router

type Router interface {
	SendRequest(context.Context, Request) (Response, error)
}

Router manages request routing

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