micro

package module
v3.3.8 Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2021 License: Apache-2.0 Imports: 16 Imported by: 0

README

Micro License Doc Status Lint Slack

Micro is a standard library for microservices.

Overview

Micro provides the core requirements for distributed systems development including RPC and Event driven communication.

Features

Micro abstracts away the details of distributed systems. Here are the main features.

  • Authentication - Auth is built in as a first class citizen. Authentication and authorization enable secure zero trust networking by providing every service an identity and certificates. This additionally includes rule based access control.

  • Dynamic Config - Load and hot reload dynamic config from anywhere. The config interface provides a way to load application level config from any source such as env vars, file, etcd. You can merge the sources and even define fallbacks.

  • Data Storage - A simple data store interface to read, write and delete records. It includes support for memory, file and CockroachDB by default. State and persistence becomes a core requirement beyond prototyping and Micro looks to build that into the framework.

  • Service Discovery - Automatic service registration and name resolution. Service discovery is at the core of micro service development. When service A needs to speak to service B it needs the location of that service.

  • Load Balancing - Client side load balancing built on service discovery. Once we have the addresses of any number of instances of a service we now need a way to decide which node to route to. We use random hashed load balancing to provide even distribution across the services and retry a different node if there's a problem.

  • Message Encoding - Dynamic message encoding based on content-type. The client and server will use codecs along with content-type to seamlessly encode and decode Go types for you. Any variety of messages could be encoded and sent from different clients. The client and server handle this by default.

  • Transport - gRPC or http based request/response with support for bidirectional streaming. We provide an abstraction for synchronous communication. A request made to a service will be automatically resolved, load balanced, dialled and streamed.

  • Async Messaging - PubSub is built in as a first class citizen for asynchronous communication and event driven architectures. Event notifications are a core pattern in micro service development.

  • Synchronization - Distributed systems are often built in an eventually consistent manner. Support for distributed locking and leadership are built in as a Sync interface. When using an eventually consistent database or scheduling use the Sync interface.

  • Pluggable Interfaces - Micro makes use of Go interfaces for each system abstraction. Because of this these interfaces are pluggable and allows Micro to be runtime agnostic.

Getting Started

To be created.

License

Micro is Apache 2.0 licensed.

Documentation

Overview

Package micro is a pluggable framework for microservices

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewContext

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

NewContext returns a new Context with the Service embedded within it.

func RegisterHandler

func RegisterHandler(s server.Server, h interface{}, opts ...server.HandlerOption) error

RegisterHandler is syntactic sugar for registering a handler

func RegisterSubscriber

func RegisterSubscriber(topic string, s server.Server, h interface{}, opts ...server.SubscriberOption) error

RegisterSubscriber is syntactic sugar for registering a subscriber

Types

type BrokerOption added in v3.2.0

type BrokerOption func(*brokerOptions)

BrokerOption func signature

func BrokerClient added in v3.2.0

func BrokerClient(n string) BrokerOption

BrokerClient specifies clients for broker

func BrokerServer added in v3.2.0

func BrokerServer(n string) BrokerOption

BrokerServer specifies servers for broker

type Event

type Event interface {
	// Publish publishes a message to the event topic
	Publish(ctx context.Context, msg interface{}, opts ...client.PublishOption) error
}

Event is used to publish messages to a topic

func NewEvent

func NewEvent(topic string, c client.Client) Event

NewEvent creates a new event publisher

type LoggerOption added in v3.2.0

type LoggerOption func(*loggerOptions)

LoggerOption func signature

type Option

type Option func(*Options) error

Option func

func Address

func Address(addr string) Option

Address sets the address of the server

func AfterStart

func AfterStart(fn func(context.Context) error) Option

AfterStart run funcs after service starts

func AfterStop

func AfterStop(fn func(context.Context) error) Option

AfterStop run funcs after service stops

func BeforeStart

func BeforeStart(fn func(context.Context) error) Option

BeforeStart run funcs before service starts

func BeforeStop

func BeforeStop(fn func(context.Context) error) Option

BeforeStop run funcs before service stops

func Broker

func Broker(b broker.Broker, opts ...BrokerOption) Option

Broker to be used for client and server

func Client

func Client(c ...client.Client) Option

Client to be used for service

func Clients added in v3.2.0

func Clients(c ...client.Client) Option

Clients to be used for service

func Config

func Config(c ...config.Config) Option

Config sets the config for the service

func Configs added in v3.1.0

func Configs(c ...config.Config) Option

Configs sets the configs for the service

func Context

func Context(ctx context.Context) Option

Context specifies a context for the service. Can be used to signal shutdown of the service and for extra option values.

func Logger

func Logger(l logger.Logger, opts ...LoggerOption) Option

Logger set the logger to use

func Metadata

func Metadata(md metadata.Metadata) Option

Metadata associated with the service

func Meter added in v3.1.6

func Meter(m ...meter.Meter) Option

Meter set the meter to use

func Meters added in v3.2.0

func Meters(m ...meter.Meter) Option

Meters set the meter to use

func Name

func Name(n string) Option

Name of the service

func Register added in v3.2.0

func Register(r register.Register, opts ...RegisterOption) Option

Register sets the register for the service and the underlying components

func RegisterInterval

func RegisterInterval(td time.Duration, opts ...RegisterOption) Option

RegisterInterval specifies the interval on which to re-register

func RegisterTTL

func RegisterTTL(td time.Duration, opts ...RegisterOption) Option

RegisterTTL specifies the TTL to use when registering the service

func Router

func Router(r router.Router, opts ...RouterOption) Option

Router sets the router

func Server

func Server(s ...server.Server) Option

Server to be used for service

func Servers added in v3.2.0

func Servers(s ...server.Server) Option

Servers to be used for service

func Store

func Store(s ...store.Store) Option

Store sets the store to use

func Stores added in v3.2.0

func Stores(s ...store.Store) Option

Stores sets the store to use

func Tracer

func Tracer(t tracer.Tracer, opts ...TracerOption) Option

Tracer sets the tracer

func Version

func Version(v string) Option

Version of the service

type Options

type Options struct {
	// Context holds external options or cancel stuff
	Context context.Context
	// Metadata holds service metadata
	Metadata metadata.Metadata
	// Version holds service version
	Version string
	// Name holds service name
	Name string
	// Brokers holds brokers
	Brokers []broker.Broker
	// Loggers holds loggers
	Loggers []logger.Logger
	// Meters holds meter
	Meters []meter.Meter
	// Configs holds config
	Configs []config.Config
	// Clients holds clients
	Clients []client.Client
	// Auths holds auths
	Auths []auth.Auth
	// Stores holds stores
	Stores []store.Store
	// Registers holds registers
	Registers []register.Register
	// Tracers holds tracers
	Tracers []tracer.Tracer
	// Routers holds routers
	Routers []router.Router
	// BeforeStart holds funcs that runs before service starts
	BeforeStart []func(context.Context) error
	// BeforeStop holds funcs that runs before service stops
	BeforeStop []func(context.Context) error
	// AfterStart holds funcs that runs after service starts
	AfterStart []func(context.Context) error
	// AfterStop holds funcs that runs after service stops
	AfterStop []func(context.Context) error
	// Servers holds servers
	Servers []server.Server
}

Options for micro service

func NewOptions

func NewOptions(opts ...Option) Options

NewOptions returns new Options filled with defaults and overrided by provided opts

type RegisterOption added in v3.2.0

type RegisterOption func(*registerOptions)

RegisterOption func signature

func RegisterBroker added in v3.2.0

func RegisterBroker(n string) RegisterOption

RegisterBroker specifies broker for register

func RegisterRouter added in v3.2.0

func RegisterRouter(n string) RegisterOption

RegisterRouter speciefies routers for register

func RegisterServer added in v3.2.0

func RegisterServer(n string) RegisterOption

RegisterServer specifies servers for register

type RouterOption added in v3.2.0

type RouterOption func(*routerOptions)

RouterOption func signature

func RouterClient added in v3.2.0

func RouterClient(n string) RouterOption

RouterClient sets the clients for router

type Service

type Service interface {
	// The service name
	Name() string
	// Init initialises options
	Init(...Option) error
	// Options returns the current options
	Options() Options
	// Auth is for handling auth
	Auth(...string) auth.Auth
	// Logger is for logs
	Logger(...string) logger.Logger
	// Config if for config
	Config(...string) config.Config
	// Client is for calling services
	Client(...string) client.Client
	// Broker is for sending and receiving events
	Broker(...string) broker.Broker
	// Server is for handling requests and events
	Server(...string) server.Server
	// Store is for key/val store
	Store(...string) store.Store
	// Register
	Register(...string) register.Register
	// Tracer
	Tracer(...string) tracer.Tracer
	// Router
	Router(...string) router.Router
	// Meter
	Meter(...string) meter.Meter

	// Runtime
	// Runtime(string) (runtime.Runtime, bool)
	// Profile
	// Profile(string) (profile.Profile, bool)
	// Run the service
	Run() error
	// The service implementation
	String() string
}

Service is an interface that wraps the lower level components. Its works as container with building blocks for service.

func FromContext

func FromContext(ctx context.Context) (Service, bool)

FromContext retrieves a Service from the Context.

func NewService

func NewService(opts ...Option) Service

NewService creates and returns a new Service based on the packages within.

type TracerOption added in v3.2.0

type TracerOption func(*tracerOptions)

TracerOption func signature

func TracerBroker added in v3.2.0

func TracerBroker(n string) TracerOption

TracerBroker sets the broker for tracer

func TracerClient added in v3.2.0

func TracerClient(n string) TracerOption

TracerClient sets the clients for tracer

func TracerServer added in v3.2.0

func TracerServer(n string) TracerOption

TracerServer sets the servers for tracer

func TracerStore added in v3.2.0

func TracerStore(n string) TracerOption

TracerStore sets the store for tracer

Directories

Path Synopsis
api
handler
Package handler provides http handlers
Package handler provides http handlers
resolver
Package resolver resolves a http request to an endpoint
Package resolver resolves a http request to an endpoint
resolver/grpc
Package grpc resolves a grpc service like /greeter.Say/Hello to greeter service
Package grpc resolves a grpc service like /greeter.Say/Hello to greeter service
resolver/host
Package host resolves using http host
Package host resolves using http host
resolver/path
Package path resolves using http path
Package path resolves using http path
resolver/subdomain
Package subdomain is a resolver which uses the subdomain to determine the domain to route to.
Package subdomain is a resolver which uses the subdomain to determine the domain to route to.
resolver/vpath
Package vpath resolves using http path and recognised versioned urls
Package vpath resolves using http path and recognised versioned urls
router
Package router provides api service routing
Package router provides api service routing
Package auth provides authentication and authorization capability
Package auth provides authentication and authorization capability
Package broker is an interface used for asynchronous messaging
Package broker is an interface used for asynchronous messaging
Package build is for building source into a package
Package build is for building source into a package
Package client is an interface for an RPC client
Package client is an interface for an RPC client
Package codec is an interface for encoding messages
Package codec is an interface for encoding messages
Package config is an interface for dynamic configuration.
Package config is an interface for dynamic configuration.
Package errors provides a way to return detailed information for an RPC request error.
Package errors provides a way to return detailed information for an RPC request error.
Package flow is an interface used for saga pattern messaging
Package flow is an interface used for saga pattern messaging
Package logger provides a log interface
Package logger provides a log interface
wrapper
Package wrapper provides wrapper for Logger
Package wrapper provides wrapper for Logger
Package metadata is a way of defining message headers Package metadata is a way of defining message headers
Package metadata is a way of defining message headers Package metadata is a way of defining message headers
Package meter is for instrumentation
Package meter is for instrumentation
handler
Code generated by protoc-gen-micro source: handler.proto Code generated by protoc-gen-micro source: handler.proto
Code generated by protoc-gen-micro source: handler.proto Code generated by protoc-gen-micro source: handler.proto
Package network is for creating internetworks
Package network is for creating internetworks
transport
Package transport is an interface for synchronous connection based communication
Package transport is an interface for synchronous connection based communication
tunnel
Package tunnel provides gre network tunnelling
Package tunnel provides gre network tunnelling
tunnel/broker
Package broker is a tunnel broker
Package broker is a tunnel broker
tunnel/transport
Package transport provides a tunnel transport
Package transport provides a tunnel transport
Package profiler is for profilers
Package profiler is for profilers
http
Package http enables the http profiler
Package http enables the http profiler
pprof
Package pprof provides a pprof profiler which writes output to /tmp/[name].{cpu,mem}.pprof
Package pprof provides a pprof profiler which writes output to /tmp/[name].{cpu,mem}.pprof
Package proxy is a transparent proxy built on the micro/server Package proxy is a transparent proxy built on the micro/server
Package proxy is a transparent proxy built on the micro/server Package proxy is a transparent proxy built on the micro/server
Package register is an interface for service discovery
Package register is an interface for service discovery
Package resolver resolves network names to addresses
Package resolver resolves network names to addresses
dns
Package dns resolves names to dns records
Package dns resolves names to dns records
dnssrv
Package dnssrv resolves names to dns srv records
Package dnssrv resolves names to dns srv records
http
Package http resolves names to network addresses using a http request
Package http resolves names to network addresses using a http request
noop
Package noop is a noop resolver
Package noop is a noop resolver
registry
Package register resolves names using the micro register
Package register resolves names using the micro register
static
Package static is a static resolver
Package static is a static resolver
Package router provides a network routing control plane
Package router provides a network routing control plane
Package runtime is a service runtime manager
Package runtime is a service runtime manager
Package selector is for node selection and load balancing
Package selector is for node selection and load balancing
Package server is an interface for a micro server
Package server is an interface for a micro server
health
Code generated by protoc-gen-micro source: health.proto Code generated by protoc-gen-micro source: health.proto
Code generated by protoc-gen-micro source: health.proto Code generated by protoc-gen-micro source: health.proto
Package store is an interface for distributed data storage.
Package store is an interface for distributed data storage.
Package sync is an interface for distributed synchronization
Package sync is an interface for distributed synchronization
Package tracer provides an interface for distributed tracing Package tracer provides an interface for distributed tracing
Package tracer provides an interface for distributed tracing Package tracer provides an interface for distributed tracing
wrapper
Package wrapper provides wrapper for Tracer
Package wrapper provides wrapper for Tracer
util
backoff
Package backoff provides backoff functionality
Package backoff provides backoff functionality
buf
ctx
io
Package io is for io management
Package io is for io management
jitter
Package jitter provides a random jitter
Package jitter provides a random jitter
net
pki
Package pki provides PKI all the PKI functions necessary to run micro over an untrusted network including a CA
Package pki provides PKI all the PKI functions necessary to run micro over an untrusted network including a CA
pool
Package pool is a connection pool
Package pool is a connection pool
qson
Package qson implmenets decoding of URL query params into JSON and Go values (using JSON struct tags).
Package qson implmenets decoding of URL query params into JSON and Go values (using JSON struct tags).
ring
Package ring provides a simple ring buffer for storing local data
Package ring provides a simple ring buffer for storing local data
socket
Package socket provides a pseudo socket
Package socket provides a pseudo socket
stream
Package stream encapsulates streams within streams
Package stream encapsulates streams within streams
sync
Package sync will sync multiple stores
Package sync will sync multiple stores

Jump to

Keyboard shortcuts

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