...

Package nats

import "github.com/go-kit/kit/transport/nats"
Overview
Index

Overview ▾

Package nats provides a NATS transport.

Index ▾

func DefaultErrorEncoder(_ context.Context, err error, reply string, nc *nats.Conn)
func EncodeJSONRequest(_ context.Context, msg *nats.Msg, request interface{}) error
func EncodeJSONResponse(_ context.Context, reply string, nc *nats.Conn, response interface{}) error
func NopRequestDecoder(_ context.Context, _ *nats.Msg) (interface{}, error)
type DecodeRequestFunc
type DecodeResponseFunc
type EncodeRequestFunc
type EncodeResponseFunc
type ErrorEncoder
type Publisher
    func NewPublisher(publisher *nats.Conn, subject string, enc EncodeRequestFunc, dec DecodeResponseFunc, options ...PublisherOption) *Publisher
    func (p Publisher) Endpoint() endpoint.Endpoint
type PublisherOption
    func PublisherAfter(after ...PublisherResponseFunc) PublisherOption
    func PublisherBefore(before ...RequestFunc) PublisherOption
    func PublisherTimeout(timeout time.Duration) PublisherOption
type PublisherResponseFunc
type RequestFunc
type Subscriber
    func NewSubscriber(e endpoint.Endpoint, dec DecodeRequestFunc, enc EncodeResponseFunc, options ...SubscriberOption) *Subscriber
    func (s Subscriber) ServeMsg(nc *nats.Conn) func(msg *nats.Msg)
type SubscriberFinalizerFunc
type SubscriberOption
    func SubscriberAfter(after ...SubscriberResponseFunc) SubscriberOption
    func SubscriberBefore(before ...RequestFunc) SubscriberOption
    func SubscriberErrorEncoder(ee ErrorEncoder) SubscriberOption
    func SubscriberErrorHandler(errorHandler transport.ErrorHandler) SubscriberOption
    func SubscriberErrorLogger(logger log.Logger) SubscriberOption
    func SubscriberFinalizer(f ...SubscriberFinalizerFunc) SubscriberOption
type SubscriberResponseFunc

Package files

doc.go encode_decode.go publisher.go request_response_funcs.go subscriber.go

func DefaultErrorEncoder

func DefaultErrorEncoder(_ context.Context, err error, reply string, nc *nats.Conn)

DefaultErrorEncoder writes the error to the subscriber reply.

func EncodeJSONRequest

func EncodeJSONRequest(_ context.Context, msg *nats.Msg, request interface{}) error

EncodeJSONRequest is an EncodeRequestFunc that serializes the request as a JSON object to the Data of the Msg. Many JSON-over-NATS services can use it as a sensible default.

func EncodeJSONResponse

func EncodeJSONResponse(_ context.Context, reply string, nc *nats.Conn, response interface{}) error

EncodeJSONResponse is a EncodeResponseFunc that serializes the response as a JSON object to the subscriber reply. Many JSON-over services can use it as a sensible default.

func NopRequestDecoder

func NopRequestDecoder(_ context.Context, _ *nats.Msg) (interface{}, error)

NopRequestDecoder is a DecodeRequestFunc that can be used for requests that do not need to be decoded, and simply returns nil, nil.

type DecodeRequestFunc

DecodeRequestFunc extracts a user-domain request object from a publisher request object. It's designed to be used in NATS subscribers, for subscriber-side endpoints. One straightforward DecodeRequestFunc could be something that JSON decodes from the request body to the concrete response type.

type DecodeRequestFunc func(context.Context, *nats.Msg) (request interface{}, err error)

type DecodeResponseFunc

DecodeResponseFunc extracts a user-domain response object from an NATS response object. It's designed to be used in NATS publisher, for publisher-side endpoints. One straightforward DecodeResponseFunc could be something that JSON decodes from the response payload to the concrete response type.

type DecodeResponseFunc func(context.Context, *nats.Msg) (response interface{}, err error)

type EncodeRequestFunc

EncodeRequestFunc encodes the passed request object into the NATS request object. It's designed to be used in NATS publishers, for publisher-side endpoints. One straightforward EncodeRequestFunc could something that JSON encodes the object directly to the request payload.

type EncodeRequestFunc func(context.Context, *nats.Msg, interface{}) error

type EncodeResponseFunc

EncodeResponseFunc encodes the passed response object to the subscriber reply. It's designed to be used in NATS subscribers, for subscriber-side endpoints. One straightforward EncodeResponseFunc could be something that JSON encodes the object directly to the response body.

type EncodeResponseFunc func(context.Context, string, *nats.Conn, interface{}) error

type ErrorEncoder

ErrorEncoder is responsible for encoding an error to the subscriber reply. Users are encouraged to use custom ErrorEncoders to encode errors to their replies, and will likely want to pass and check for their own error types.

type ErrorEncoder func(ctx context.Context, err error, reply string, nc *nats.Conn)

type Publisher

Publisher wraps a URL and provides a method that implements endpoint.Endpoint.

type Publisher struct {
    // contains filtered or unexported fields
}

func NewPublisher

func NewPublisher(
    publisher *nats.Conn,
    subject string,
    enc EncodeRequestFunc,
    dec DecodeResponseFunc,
    options ...PublisherOption,
) *Publisher

NewPublisher constructs a usable Publisher for a single remote method.

func (Publisher) Endpoint

func (p Publisher) Endpoint() endpoint.Endpoint

Endpoint returns a usable endpoint that invokes the remote endpoint.

type PublisherOption

PublisherOption sets an optional parameter for clients.

type PublisherOption func(*Publisher)

func PublisherAfter

func PublisherAfter(after ...PublisherResponseFunc) PublisherOption

PublisherAfter sets the ClientResponseFuncs applied to the incoming NATS request prior to it being decoded. This is useful for obtaining anything off of the response and adding onto the context prior to decoding.

func PublisherBefore

func PublisherBefore(before ...RequestFunc) PublisherOption

PublisherBefore sets the RequestFuncs that are applied to the outgoing NATS request before it's invoked.

func PublisherTimeout

func PublisherTimeout(timeout time.Duration) PublisherOption

PublisherTimeout sets the available timeout for NATS request.

type PublisherResponseFunc

PublisherResponseFunc may take information from an NATS request and make the response available for consumption. ClientResponseFuncs are only executed in clients, after a request has been made, but prior to it being decoded.

type PublisherResponseFunc func(context.Context, *nats.Msg) context.Context

type RequestFunc

RequestFunc may take information from a publisher request and put it into a request context. In Subscribers, RequestFuncs are executed prior to invoking the endpoint.

type RequestFunc func(context.Context, *nats.Msg) context.Context

type Subscriber

Subscriber wraps an endpoint and provides nats.MsgHandler.

type Subscriber struct {
    // contains filtered or unexported fields
}

func NewSubscriber

func NewSubscriber(
    e endpoint.Endpoint,
    dec DecodeRequestFunc,
    enc EncodeResponseFunc,
    options ...SubscriberOption,
) *Subscriber

NewSubscriber constructs a new subscriber, which provides nats.MsgHandler and wraps the provided endpoint.

func (Subscriber) ServeMsg

func (s Subscriber) ServeMsg(nc *nats.Conn) func(msg *nats.Msg)

ServeMsg provides nats.MsgHandler.

type SubscriberFinalizerFunc

SubscriberFinalizerFunc can be used to perform work at the end of an request from a publisher, after the response has been written to the publisher. The principal intended use is for request logging.

type SubscriberFinalizerFunc func(ctx context.Context, msg *nats.Msg)

type SubscriberOption

SubscriberOption sets an optional parameter for subscribers.

type SubscriberOption func(*Subscriber)

func SubscriberAfter

func SubscriberAfter(after ...SubscriberResponseFunc) SubscriberOption

SubscriberAfter functions are executed on the subscriber reply after the endpoint is invoked, but before anything is published to the reply.

func SubscriberBefore

func SubscriberBefore(before ...RequestFunc) SubscriberOption

SubscriberBefore functions are executed on the publisher request object before the request is decoded.

func SubscriberErrorEncoder

func SubscriberErrorEncoder(ee ErrorEncoder) SubscriberOption

SubscriberErrorEncoder is used to encode errors to the subscriber reply whenever they're encountered in the processing of a request. Clients can use this to provide custom error formatting. By default, errors will be published with the DefaultErrorEncoder.

func SubscriberErrorHandler

func SubscriberErrorHandler(errorHandler transport.ErrorHandler) SubscriberOption

SubscriberErrorHandler is used to handle non-terminal errors. By default, non-terminal errors are ignored. This is intended as a diagnostic measure. Finer-grained control of error handling, including logging in more detail, should be performed in a custom SubscriberErrorEncoder which has access to the context.

func SubscriberErrorLogger

func SubscriberErrorLogger(logger log.Logger) SubscriberOption

SubscriberErrorLogger is used to log non-terminal errors. By default, no errors are logged. This is intended as a diagnostic measure. Finer-grained control of error handling, including logging in more detail, should be performed in a custom SubscriberErrorEncoder which has access to the context. Deprecated: Use SubscriberErrorHandler instead.

func SubscriberFinalizer

func SubscriberFinalizer(f ...SubscriberFinalizerFunc) SubscriberOption

SubscriberFinalizer is executed at the end of every request from a publisher through NATS. By default, no finalizer is registered.

type SubscriberResponseFunc

SubscriberResponseFunc may take information from a request context and use it to manipulate a Publisher. SubscriberResponseFuncs are only executed in subscribers, after invoking the endpoint but prior to publishing a reply.

type SubscriberResponseFunc func(context.Context, *nats.Conn) context.Context