...

Package client

import "github.com/gonitro/nitro/app/client"
Overview
Index
Subdirectories

Overview ▾

Package client is an interface for an RPC client

Index ▾

Variables
func LookupRoute(ctx context.Context, req Request, opts CallOptions) ([]string, error)
func RetryAlways(ctx context.Context, req Request, retryCount int, err error) (bool, error)
func RetryOnError(ctx context.Context, req Request, retryCount int, err error) (bool, error)
type BackoffFunc
type CallFunc
type CallOption
    func WithAddress(a ...string) CallOption
    func WithAuthToken() CallOption
    func WithBackoff(fn BackoffFunc) CallOption
    func WithCallWrapper(cw ...CallWrapper) CallOption
    func WithDialTimeout(d time.Duration) CallOption
    func WithNetwork(n string) CallOption
    func WithRequestTimeout(d time.Duration) CallOption
    func WithRetries(i int) CallOption
    func WithRetry(fn RetryFunc) CallOption
    func WithRouter(r router.Router) CallOption
    func WithSelectOptions(sops ...router.SelectOption) CallOption
    func WithSelector(s router.Selector) CallOption
    func WithStreamTimeout(d time.Duration) CallOption
type CallOptions
type CallWrapper
type Client
type LookupFunc
type Message
type MessageOption
    func WithMessageContentType(ct string) MessageOption
type MessageOptions
type Option
    func Backoff(fn BackoffFunc) Option
    func Broker(b event.Broker) Option
    func Codec(contentType string, c codec.NewCodec) Option
    func ContentType(ct string) Option
    func DialTimeout(d time.Duration) Option
    func Lookup(l LookupFunc) Option
    func PoolSize(d int) Option
    func PoolTTL(d time.Duration) Option
    func Proxy(addr string) Option
    func Registry(r registry.Table) 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 router.Selector) Option
    func StreamTimeout(d time.Duration) Option
    func Transport(t network.Transport) Option
    func Wrap(w Wrapper) Option
    func WrapCall(cw ...CallWrapper) Option
type Options
    func NewOptions(options ...Option) Options
type PublishOption
    func PublishContext(ctx context.Context) PublishOption
    func WithExchange(e string) PublishOption
type PublishOptions
type Request
type RequestOption
    func StreamingRequest() RequestOption
    func WithContentType(ct string) RequestOption
type RequestOptions
type Response
type RetryFunc
type Stream
type StreamWrapper
type Wrapper

Package files

backoff.go client.go lookup.go options.go retry.go wrapper.go

Variables

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
)

func LookupRoute

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

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

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

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, addr string, req Request, rsp interface{}, opts CallOptions) error

type CallOption

CallOption used by Call or Stream

type CallOption func(*CallOptions)

func WithAddress

func WithAddress(a ...string) CallOption

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

func WithAuthToken

func WithAuthToken() 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 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 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 WithRouter

func WithRouter(r router.Router) CallOption

WithRouter sets the router to use for this call

func WithSelectOptions

func WithSelectOptions(sops ...router.SelectOption) CallOption

WithSelectOptions sets the options to pass to the selector for this call

func WithSelector

func WithSelector(s router.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 {
    // Address of remote hosts
    Address []string
    // Backoff func
    Backoff BackoffFunc
    // Transport Dial Timeout
    DialTimeout time.Duration
    // Number of Call attempts
    Retries int
    // Check if retriable func
    Retry RetryFunc
    // Request/Response timeout
    RequestTimeout time.Duration
    // Router to use for this call
    Router router.Router
    // Selector to use for the call
    Selector router.Selector
    // SelectOptions to use when selecting a route
    SelectOptions []router.SelectOption
    // Stream timeout for the stream
    StreamTimeout time.Duration
    // Use the auth token as the authorization header
    AuthToken bool
    // Network to lookup the route within
    Network string

    // 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 bidirectional streaming of requests.

type Client interface {
    Init(...Option) error
    Options() Options
    NewMessage(event 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 LookupFunc

LookupFunc is used to lookup routes for a service

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

type Message

Message is the interface for publishing asynchronously

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

type MessageOption

MessageOption used by NewMessage

type MessageOption func(*MessageOptions)

func WithMessageContentType

func WithMessageContentType(ct string) MessageOption

type MessageOptions

type MessageOptions struct {
    ContentType string
}

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 event.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 Lookup

func Lookup(l LookupFunc) Option

Lookup sets the lookup function to use for resolving service names

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 Registry

func Registry(r registry.Table) Option

Registry sets the routers registry

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 Router

func Router(r router.Router) Option

Router is used to lookup routes for a service

func Selector

func Selector(s router.Selector) Option

Selector is used to select a route

func StreamTimeout

func StreamTimeout(d time.Duration) Option

StreamTimeout sets the stream timeout

func Transport

func Transport(t network.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
    // Proxy address to send requests via
    Proxy string

    // Plugged interfaces
    Broker    event.Broker
    Codecs    map[string]codec.NewCodec
    Router    router.Router
    Selector  router.Selector
    Transport network.Transport

    // Lookup used for looking up routes
    Lookup LookupFunc

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

PublishOption used by Publish

type PublishOption func(*PublishOptions)

func PublishContext

func PublishContext(ctx context.Context) PublishOption

PublishContext sets the context in publish options

func WithExchange

func WithExchange(e string) PublishOption

WithExchange sets the exchange to route a message through

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

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

type Request interface {
    // The service to call
    App() 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
    // indicates whether the request will be a streaming one rather than unary
    Stream() bool
}

type RequestOption

RequestOption used by NewRequest

type RequestOption func(*RequestOptions)

func StreamingRequest

func StreamingRequest() RequestOption

func WithContentType

func WithContentType(ct string) RequestOption

type RequestOptions

type RequestOptions struct {
    ContentType string
    Stream      bool

    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context
}

type Response

Response is the response received from a service

type Response interface {
    // Read the response
    Codec() codec.Reader
    // read the header
    Header() map[string]string
    // Read the undecoded response
    Read() ([]byte, error)
}

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 Stream

Stream is the interface for a bidirectional synchronous 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(interface{}) error
    // Recv will decode and read a response
    Recv(interface{}) error
    // Error returns the stream error
    Error() error
    // Close closes the stream
    Close() error
}

type StreamWrapper

StreamWrapper wraps a Stream and returns the equivalent

type StreamWrapper func(Stream) Stream

type Wrapper

Wrapper wraps a client and returns a client

type Wrapper func(Client) Client

Subdirectories

Name Synopsis
..
rpc Package rpc provides a network agnostic RPC client