cluster

package
v1.0.4 Latest Latest
Warning

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

Go to latest
Published: Sep 6, 2019 License: MIT Imports: 18 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AstraOptions

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

type Client

type Client interface {
	http.Handler

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

Jump to

Keyboard shortcuts

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