Back to

Package cluster

Latest Go to latest

The highest tagged major version is .

Published: Sep 6, 2019 | License: MIT | Module:


type AstraOptions

type AstraOptions struct {
	Tags  []string
	Nodes []string
	Debug bool

type Client

type Client interface {

	Do(req *http.Request) (*http.Response, error)
	Use(fnName string) Client

Client is used for accessing published endpoints of services. It combines a fail-safe proxy for exposing remotely published http.HandlerFunc as local http.Handler, also a http.Client like function Do to send custom requests to remote methods directly.

type Cluster

type Cluster interface {
	// ListenAndServe starts listening for TCP connections on the provided address
	// for interprocess communication. This is how services connect to each other,
	// this is actually the only port that needs to be open, if service is not
	// exposed outside the cluster. In case of astranet implementation, all TCP
	// connections between instances will be kept alive bound to the provided port.
	ListenAndServe(addr string) error
	// ListenAndServeHTTP allows to expose a debugging endpoint that is just an HTTP
	// reverse proxy into virtual network. Since we decided that our RPC proto and
	// routing is based on HTTP, you can use curl to make RPC calls using that
	// endpoint.
	// Example: curl -X GET http://meshrpc.greeter/ping where
	// meshrpc.greeter is a service registered in the discovery table.
	// (Note: since it’s a virtual host, it may have different backends with a LB).
	ListenAndServeHTTP(addr string) error
	// Join is for joining to the service discovery cluster. In case of P2P
	// mechanics of astranet, it will try to connect to the listed nodes,
	// establish TCP connections, get routing and services info and share own
	// routing and services info.
	Join(nodes []string) error
	// Publish exposes provided Handler to the private net under own service name.
	// Eeach func that is http.HandlerFunc is being mapped to URI and connected
	// to the internal HTTP router (Gin). If HandlerSpec implements HTTPMethodsSpec,
	// a methods map is used, otherwise all methods are accepted and it's a client
	// responsibility to use the correct one.
	Publish(spec HandlerSpec) error
	// Wait blocks until all of the mapped services in spec become available or context
	// is cancelled. It’s useful to guarantee that all dependencies are up and
	// alive before running the service that uses them. Returns an error if not
	// services became available upon context cancellation. Specs contains a mapping
	// ServiceName -> HandlerSpec.
	Wait(ctx context.Context, specs map[string]HandlerSpec) error
	// NewClient returns a new cluster.Client for accessing published endpoints of
	// services. The mandatory HandlerSpec argument accepts any interface type has
	// http.HandlerFunc methods, like in Publish, but the its implementation is not
	// required. If provided with a specific function name, cluster.Client locks
	// itself to access that specific method from HandlerSpec and starts to conform
	// the http.Handler interface. Otherwise it may be used to access any method
	// from HandlerSpec, using the same Do(req *http.Request) method as with
	// http.Client.
	NewClient(serviceName string, spec HandlerSpec, fn ...string) Client

func NewAstraCluster

func NewAstraCluster(serviceName string, opt *AstraOptions) Cluster

type EndpointInfo

type EndpointInfo struct {
	Service string
	Path    string
	Methods []string
	SpecTyp reflect.Type
	Handler func(c *gin.Context)

func (*EndpointInfo) IsValidHandler

func (e *EndpointInfo) IsValidHandler(name string) bool

func (*EndpointInfo) MethodAllowed

func (e *EndpointInfo) MethodAllowed(method string) bool

type ErrHandlerFunc

type ErrHandlerFunc func(err error)

type Error

type Error struct {
	Desc string
	Err  error

func (*Error) Error

func (c *Error) Error() string

type HTTPMethodsSpec

type HTTPMethodsSpec interface {
	HTTPMethodsMap() map[string][]string

type HandlerSpec

type HandlerSpec interface{}

Package Files

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier