Package server
Overview ▹
Index ▹
Variables
var ( DefaultAddress = ":0" DefaultName = "go-server" DefaultVersion = "1.0.0" DefaultId = uuid.NewUUID().String() DefaultServer Server = newRpcServer() )
func Deregister ¶
func Deregister() error
Deregister deregisters the default server from the discovery system
func Handle ¶
func Handle(h Handler) error
Handle registers a handler interface with the default server to handle inbound requests
func Init ¶
func Init(opt ...Option)
Init initialises the default server with options passed in
func NewContext ¶
func NewContext(ctx context.Context, s Server) context.Context
func Register ¶
func Register() error
Register registers the default server with the discovery system
func Run ¶
func Run() error
Run starts the default server and waits for a kill signal before exiting. Also registers/deregisters the server
func Start ¶
func Start() error
Start starts the default server
func Stop ¶
func Stop() error
Stop stops the default server
func String ¶
func String() string
String returns name of Server implementation
func Subscribe ¶
func Subscribe(s Subscriber) error
Subscribe registers a subscriber interface with the default server which subscribes to specified topic with the broker
type Debug ¶
We use this to wrap any debug handlers so we preserve the signature Debug.{Method}
type Debug struct { debug.DebugHandler }
type Handler ¶
Handler interface represents a Service request handler. It's generated by passing any type of public concrete object with methods into server.NewHandler. Most will pass in a struct.
Example:
type Service struct {} func (s *Service) Method(context, request, response) error { return nil }
type Handler interface { Name() string Handler() interface{} Endpoints() []*registry.Endpoint Options() HandlerOptions }
func NewHandler ¶
func NewHandler(h interface{}, opts ...HandlerOption) Handler
NewHandler creates a new handler interface using the default server Handlers are required to be a public object with public methods. Call to a service method such as Foo.Bar expects the type:
type Foo struct {} func (f *Foo) Bar(ctx, req, rsp) error { return nil }
type HandlerFunc ¶
HandlerFunc represents a single method of a handler. It's used primarily for the wrappers. What's handed to the actual method is the concrete request and response types.
type HandlerFunc func(ctx context.Context, req Request, rsp interface{}) error
type HandlerOption ¶
type HandlerOption func(*HandlerOptions)
func EndpointMetadata ¶
func EndpointMetadata(name string, md map[string]string) HandlerOption
EndpointMetadata is a Handler option that allows metadata to be added to individual endpoints.
func InternalHandler ¶
func InternalHandler(b bool) HandlerOption
Internal Handler options specifies that a handler is not advertised to the discovery system. In the future this may also limit request to the internal network or authorised user.
type HandlerOptions ¶
type HandlerOptions struct { Internal bool Metadata map[string]map[string]string }
type HandlerWrapper ¶
HandlerWrapper wraps the HandlerFunc and returns the equivalent
type HandlerWrapper func(HandlerFunc) HandlerFunc
type Option ¶
type Option func(*Options)
func Address ¶
func Address(a string) Option
Address to bind to - host:port
func Advertise ¶
func Advertise(a string) Option
The address to advertise for discovery - host:port
func Broker ¶
func Broker(b broker.Broker) Option
Broker to use for pub/sub
func Codec ¶
func Codec(contentType string, c codec.NewCodec) Option
Codec to use to encode/decode requests for a given content type
func DebugHandler ¶
func DebugHandler(d debug.DebugHandler) Option
DebugHandler for this server
func Id ¶
func Id(id string) Option
Unique server id
func Metadata ¶
func Metadata(md map[string]string) Option
Metadata associated with the server
func Name ¶
func Name(n string) Option
Server name
func RegisterTTL ¶
func RegisterTTL(t time.Duration) Option
Register the service with a TTL
func Registry ¶
func Registry(r registry.Registry) Option
Registry used for discovery
func Transport ¶
func Transport(t transport.Transport) Option
Transport mechanism for communication e.g http, rabbitmq, etc
func Version ¶
func Version(v string) Option
Version of the service
func Wait ¶
func Wait(b bool) Option
Wait tells the server to wait for requests to finish before exiting
func WrapHandler ¶
func WrapHandler(w HandlerWrapper) Option
Adds a handler Wrapper to a list of options passed into the server
func WrapSubscriber ¶
func WrapSubscriber(w SubscriberWrapper) Option
Adds a subscriber Wrapper to a list of options passed into the server
type Options ¶
type Options struct { Codecs map[string]codec.NewCodec Broker broker.Broker Registry registry.Registry Transport transport.Transport Metadata map[string]string Name string Address string Advertise string Id string Version string HdlrWrappers []HandlerWrapper SubWrappers []SubscriberWrapper RegisterTTL time.Duration // Debug Handler which can be set by a user DebugHandler debug.DebugHandler // Other options for implementations of the interface // can be stored in a context Context context.Context }
func DefaultOptions ¶
func DefaultOptions() Options
DefaultOptions returns config options for the default service
type Publication ¶
type Publication interface { Topic() string Message() interface{} ContentType() string }
type Request ¶
type Request interface {
Service() string
Method() string
ContentType() string
Request() interface{}
// indicates whether the request will be streamed
Stream() bool
}
type Server ¶
type Server interface { Options() Options Init(...Option) error Handle(Handler) error NewHandler(interface{}, ...HandlerOption) Handler NewSubscriber(string, interface{}, ...SubscriberOption) Subscriber Subscribe(Subscriber) error Register() error Deregister() error Start() error Stop() error String() string }
func FromContext ¶
func FromContext(ctx context.Context) (Server, bool)
func NewServer ¶
func NewServer(opt ...Option) Server
NewServer returns a new server with options passed in
type Streamer ¶
Streamer represents a stream established with a client. A stream can be bidirectional which is indicated by the request. The last error will be left in Error(). EOF indicated end of the stream.
type Streamer interface { Context() context.Context Request() Request Send(interface{}) error Recv(interface{}) error Error() error Close() error }
type StreamerWrapper ¶
StreamerWrapper wraps a Streamer interface and returns the equivalent. Because streams exist for the lifetime of a method invocation this is a convenient way to wrap a Stream as its in use for trace, monitoring, metrics, etc.
type StreamerWrapper func(Streamer) Streamer
type Subscriber ¶
Subscriber interface represents a subscription to a given topic using a specific subscriber function or object with methods.
type Subscriber interface { Topic() string Subscriber() interface{} Endpoints() []*registry.Endpoint Options() SubscriberOptions }
func NewSubscriber ¶
func NewSubscriber(topic string, h interface{}, opts ...SubscriberOption) Subscriber
NewSubscriber creates a new subscriber interface with the given topic and handler using the default server
type SubscriberFunc ¶
SubscriberFunc represents a single method of a subscriber. It's used primarily for the wrappers. What's handed to the actual method is the concrete publication message.
type SubscriberFunc func(ctx context.Context, msg Publication) error
type SubscriberOption ¶
type SubscriberOption func(*SubscriberOptions)
func InternalSubscriber ¶
func InternalSubscriber(b bool) SubscriberOption
Internal Subscriber options specifies that a subscriber is not advertised to the discovery system.
func SubscriberQueue ¶
func SubscriberQueue(n string) SubscriberOption
Shared queue name distributed messages across subscribers
type SubscriberOptions ¶
type SubscriberOptions struct { Queue string Internal bool }
type SubscriberWrapper ¶
SubscriberWrapper wraps the SubscriberFunc and returns the equivalent
type SubscriberWrapper func(SubscriberFunc) SubscriberFunc