yarpc

package module
v1.0.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Nov 23, 2016 License: MIT Imports: 13 Imported by: 0

README

yarpc-go GoDoc Build Status Coverage Status

A transport and encoding agnostic RPC framework.

Installation

go get -u go.uber.org/yarpc

If using Glide, at least glide version 0.12 is required to install:

$ glide --version
glide version 0.12.2

$ glide get 'go.uber.org/yarpc#~0.5'

Development Status: Alpha

Ready for adventurous users and early adopters, but there will likely be a few breaking changes and features required before releasing version 1.0.

Documentation

Index

Constants

View Source
const Version = "1.0.0-rc1"

Version is the current version of YARPC.

Variables

This section is empty.

Functions

func CanonicalizeHeaderKey

func CanonicalizeHeaderKey(k string) string

CanonicalizeHeaderKey canonicalizes the given header key for storage into the Headers map.

func InjectClients added in v0.4.0

func InjectClients(src transport.ChannelProvider, dest interface{})

InjectClients injects clients from the given Dispatcher into the given struct. dest must be a pointer to a struct with zero or more exported fields Thrift client fields. Only fields with nil values and a `service` tag will be populated; everything else will be left unchanged.

type Handler struct {
	KeyValueClient keyvalueclient.Interface `service:"keyvalue"`
	UserClient json.Client `service:"users"`
	TagClient tagclient.Interface  // will not be changed
}

var h Handler
yarpc.InjectClients(dispatcher, &h)

// InjectClients above is equivalent to,

h.KeyValueClient = keyvalueclient.New(dispatcher.Channel("keyvalue"))
h.UserClient = json.New(dispatcher.Channel("users"))

Builder functions for different client types may be registered using the RegisterClientBuilder function. This function panics if an empty client field without a registered constructor is encountered.

func OnewayInboundMiddleware added in v1.0.0

func OnewayInboundMiddleware(middleware ...transport.OnewayInboundMiddleware) transport.OnewayInboundMiddleware

OnewayInboundMiddleware combines the given collection of unary inbound middleware in-order into a single OnewayInboundMiddleware.

func OnewayOutboundMiddleware added in v1.0.0

func OnewayOutboundMiddleware(middleware ...transport.OnewayOutboundMiddleware) transport.OnewayOutboundMiddleware

OnewayOutboundMiddleware combines the given collection of unary outbound middleware in-order into a single OnewayOutboundMiddleware.

func RegisterClientBuilder added in v0.4.0

func RegisterClientBuilder(f interface{}) (forget func())

RegisterClientBuilder registers a builder function for a specific client type.

Functions must have the signature,

func(transport.Channel) T

Where T is the type of the client. T MUST be an interface.

This function panics if a client for the given type has already been registered.

After a builder function for a client type is registered, these objects can be instantiated automatically using InjectClients.

A function to unregister the builder function is returned. Note that the function will clear whatever the corresponding type's builder function is at the time it is called, regardless of whether the value matches what was passed to this function or not.

func UnaryInboundMiddleware added in v1.0.0

func UnaryInboundMiddleware(middleware ...transport.UnaryInboundMiddleware) transport.UnaryInboundMiddleware

UnaryInboundMiddleware combines the given collection of unary inbound middleware in-order into a single UnaryInboundMiddleware.

func UnaryOutboundMiddleware added in v1.0.0

func UnaryOutboundMiddleware(middleware ...transport.UnaryOutboundMiddleware) transport.UnaryOutboundMiddleware

UnaryOutboundMiddleware combines the given collection of unary outbound middleware in-order into a single UnaryOutboundMiddleware.

Types

type CallReqMeta

type CallReqMeta interface {
	Procedure(string) CallReqMeta
	Headers(Headers) CallReqMeta
	ShardKey(string) CallReqMeta
	RoutingKey(string) CallReqMeta
	RoutingDelegate(string) CallReqMeta

	GetProcedure() string
	GetHeaders() Headers
	GetShardKey() string
	GetRoutingKey() string
	GetRoutingDelegate() string
}

CallReqMeta contains information about an outgoing YARPC request.

func NewReqMeta

func NewReqMeta() CallReqMeta

NewReqMeta constructs a CallReqMeta with the given Context.

type CallResMeta

type CallResMeta interface {
	Headers() Headers
}

CallResMeta contains information about an incoming YARPC response.

type Config

type Config struct {
	Name string

	Inbounds  Inbounds
	Outbounds Outbounds

	// Inbound and Outbound Middleware that will be applied to all incoming and
	// outgoing requests respectively.
	InboundMiddleware  InboundMiddleware
	OutboundMiddleware OutboundMiddleware

	Tracer opentracing.Tracer
}

Config specifies the parameters of a new RPC constructed via New.

type Dispatcher

type Dispatcher interface {
	transport.Registrar
	transport.ChannelProvider

	// Inbounds returns a copy of the list of inbounds for this RPC object.
	//
	// The Inbounds will be returned in the same order that was used in the
	// configuration.
	Inbounds() Inbounds

	// Starts the RPC allowing it to accept and processing new incoming
	// requests.
	//
	// Blocks until the RPC is ready to start accepting new requests.
	Start() error

	// Stops the RPC. No new requests will be accepted.
	//
	// Blocks until the RPC has stopped.
	Stop() error
}

Dispatcher object is used to configure a YARPC application; it is used by Clients to send RPCs, and by Procedures to recieve them. This object is what enables an application to be transport-agnostic.

func NewDispatcher

func NewDispatcher(cfg Config) Dispatcher

NewDispatcher builds a new Dispatcher using the specified Config.

type Headers

type Headers internal.Headers

Headers defines application headers which will be sent over the wire to the recipient of an RPC call.

func NewHeaders

func NewHeaders() Headers

NewHeaders builds a new Headers object.

func (Headers) Del

func (h Headers) Del(k string)

Del deletes the given header key from the map.

func (Headers) Get

func (h Headers) Get(k string) (string, bool)

Get retrieves the value associated with the given header key, and a boolean indicating whether the key actually existed in the header map.

func (Headers) Keys

func (h Headers) Keys() []string

Keys returns a list of header keys defined on this Headers object.

All items in the list will be normalized using CanonicalizeHeaderKey.

func (Headers) Len

func (h Headers) Len() int

Len returns the number of headers defined on this object.

func (Headers) With

func (h Headers) With(k, v string) Headers

With returns a Headers object with the given key-value pair added to it. If a header with the same name already exists, it will be overwritten.

This API is similar to Go's append function. The returned Headers object MAY not point to the same underlying data store, so the returned value MUST always be used in place of the original object.

headers = headers.With("foo", "bar")

This call may be chained to set multiple headers consecutively.

headers = headers.With("foo", "bar").With("baz", "qux")

Again, note that the returned Headers object MAY point to a new object. It MAY also mutate the original object instead.

h1 = NewHeaders().With("foo", "bar")
h2 = h1.With("baz", "qux")
h1.Get("baz")  // this MAY return "qux"

type InboundMiddleware added in v1.0.0

type InboundMiddleware struct {
	Unary  transport.UnaryInboundMiddleware
	Oneway transport.OnewayInboundMiddleware
}

InboundMiddleware contains the different type of inbound middleware

type Inbounds added in v0.5.0

type Inbounds []transport.Inbound

Inbounds contains a list of inbound transports

type OutboundMiddleware added in v1.0.0

type OutboundMiddleware struct {
	Unary  transport.UnaryOutboundMiddleware
	Oneway transport.OnewayOutboundMiddleware
}

OutboundMiddleware contains the different type of outbound middleware

type Outbounds added in v0.4.0

type Outbounds map[string]transport.Outbounds

Outbounds encapsulates a service and its outbounds

type ReqMeta

type ReqMeta interface {
	Caller() string
	Encoding() transport.Encoding
	Headers() Headers
	Procedure() string
	Service() string
}

ReqMeta contains information about an incoming YARPC request.

type ResMeta

type ResMeta interface {
	Headers(Headers) ResMeta
	GetHeaders() Headers
}

ResMeta contains information about an outgoing YARPC response.

func NewResMeta

func NewResMeta() ResMeta

NewResMeta constructs a ResMeta

Directories

Path Synopsis
encoding
json
Package json provides the JSON encoding for YARPC.
Package json provides the JSON encoding for YARPC.
raw
Package raw provides the raw encoding for YARPC.
Package raw provides the raw encoding for YARPC.
thrift
Package thrift implements Thrift encoding support for YARPC.
Package thrift implements Thrift encoding support for YARPC.
thrift/thriftrw-plugin-yarpc
thriftrw-plugin-yarpc implements a plugin for ThriftRW that generates code compatible with YARPC.
thriftrw-plugin-yarpc implements a plugin for ThriftRW that generates code compatible with YARPC.
crossdock/thrift/gen-go/echo
Package echo is generated code used to make or handle TChannel calls using Thrift.
Package echo is generated code used to make or handle TChannel calls using Thrift.
crossdock/thrift/gen-go/gauntlet_tchannel
Package gauntlet_tchannel is generated code used to make or handle TChannel calls using Thrift.
Package gauntlet_tchannel is generated code used to make or handle TChannel calls using Thrift.
net
Package transport implements the low level concerns of sending and receiving bytes.
Package transport implements the low level concerns of sending and receiving bytes.
http
Package http implements the HTTP inbound and outbound transports for YARPC.
Package http implements the HTTP inbound and outbound transports for YARPC.
Package yarpctest provides utilities to test YARPC services and clients.
Package yarpctest provides utilities to test YARPC services and clients.
recorder
Package recorder records & replay yarpc requests on the client side.
Package recorder records & replay yarpc requests on the client side.

Jump to

Keyboard shortcuts

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