server

package
v0.0.0-...-5718ce5 Latest Latest
Warning

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

Go to latest
Published: Apr 1, 2016 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Overview

Server represents a server instance in go-micro which handles synchronous requests via handlers and asynchronous requests via subscribers that register with a broker.

The server combines the all the packages in go-micro to create a whole unit used for building applications including discovery, client/server communication and pub/sub.

import "github.com/micro/go-micro/server"

type Greeter struct {}

func (g *Greeter) Hello(ctx context.Context, req *greeter.Request, rsp *greeter.Response) error {
	rsp.Msg = "Hello " + req.Name
	return nil
}

s := server.NewServer()

s.Handle(
	s.NewHandler(&Greeter{}),
)

s.Start()

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultAddress        = ":0"
	DefaultName           = "go-server"
	DefaultVersion        = "1.0.0"
	DefaultId             = uuid.NewUUID().String()
	DefaultServer  Server = newRpcServer()
)

Functions

func Deregister

func Deregister() error

Deregisters the default server from the discovery system

func Handle

func Handle(h Handler) error

Registers a handler interface with the default server to handle inbound requests

func Init

func Init(opt ...Option)

Initialises the default server with options passed in

func NewContext

func NewContext(ctx context.Context, s Server) context.Context

func Register

func Register() error

Registers the default server with the discovery system

func Run

func Run() error

Blocking run starts the default server and waits for a kill signal before exiting. Also registers/deregisters the server

func Start

func Start() error

Starts the default server

func Stop

func Stop() error

Stops the default server

func String

func String() string

func Subscribe

func Subscribe(s Subscriber) error

Registers a subscriber interface with the default server which subscribes to specified topic with the broker

Types

type Debug

type Debug struct {
	debug.DebugHandler
}

We use this to wrap any debug handlers so we preserve the signature Debug.{Method}

func (*Debug) Health

func (d *Debug) Health(ctx context.Context, req *proto.HealthRequest, rsp *proto.HealthResponse) error

type Handler

type Handler interface {
	Name() string
	Handler() interface{}
	Endpoints() []*registry.Endpoint
	Options() HandlerOptions
}

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
}

func NewHandler

func NewHandler(h interface{}, opts ...HandlerOption) Handler

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

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

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 HandlerOption

type HandlerOption func(*HandlerOptions)

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
}

type HandlerWrapper

type HandlerWrapper func(HandlerFunc) HandlerFunc

HandlerWrapper wraps the HandlerFunc and returns the equivalent

type Option

type Option func(*Options)

func Address

func Address(a string) Option

Address to bind to - host:port

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

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

Returns a new server with options passed in

type Streamer

type Streamer interface {
	Context() context.Context
	Request() Request
	Send(interface{}) error
	Recv(interface{}) error
	Error() error
	Close() error
}

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 StreamerWrapper

type StreamerWrapper func(Streamer) Streamer

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 Subscriber

type Subscriber interface {
	Topic() string
	Subscriber() interface{}
	Endpoints() []*registry.Endpoint
	Options() SubscriberOptions
}

Subscriber interface represents a subscription to a given topic using a specific subscriber function or object with methods.

func NewSubscriber

func NewSubscriber(topic string, h interface{}, opts ...SubscriberOption) Subscriber

Creates a new subscriber interface with the given topic and handler using the default server

type SubscriberFunc

type SubscriberFunc func(ctx context.Context, msg Publication) error

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

type SubscriberWrapper func(SubscriberFunc) SubscriberFunc

SubscriberWrapper wraps the SubscriberFunc and returns the equivalent

Directories

Path Synopsis
proto
Package debug is a generated protocol buffer package.
Package debug is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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