micro

package module
v3.10.22 Latest Latest
Warning

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

Go to latest
Published: May 29, 2023 License: Apache-2.0 Imports: 15 Imported by: 8

README

Micro License Doc Status Lint Coverage

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

type BrokerOption func(*brokerOptions)

BrokerOption func signature

func BrokerClient

func BrokerClient(n string) BrokerOption

BrokerClient specifies clients for broker

func BrokerServer

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

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

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

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

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

Meter set the meter to use

func Meters

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

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

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

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

type RegisterOption func(*registerOptions)

RegisterOption func signature

func RegisterBroker

func RegisterBroker(n string) RegisterOption

RegisterBroker specifies broker for register

func RegisterRouter

func RegisterRouter(n string) RegisterOption

RegisterRouter speciefies routers for register

func RegisterServer

func RegisterServer(n string) RegisterOption

RegisterServer specifies servers for register

type RouterOption

type RouterOption func(*routerOptions)

RouterOption func signature

func RouterClient

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
	// Logger is for output log from service components
	Logger(...string) logger.Logger
	// Config if for config handling via load/save methods and also with ability to watch changes
	Config(...string) config.Config
	// Client is for sync calling services via RPC
	Client(...string) client.Client
	// Broker is for sending and receiving async events
	Broker(...string) broker.Broker
	// Server is for handling requests and broker unmarshaled events
	Server(...string) server.Server
	// Store is for key/val store
	Store(...string) store.Store
	// Register used by client to lookup other services and server registers on it
	Register(...string) register.Register
	// Tracer
	Tracer(...string) tracer.Tracer
	// Router
	Router(...string) router.Router
	// Meter may be used internally by other component to export metrics
	Meter(...string) meter.Meter

	// Runtime
	// Runtime(string) (runtime.Runtime, bool)
	// Profile
	// Profile(string) (profile.Profile, bool)
	// Run the service and wait for stop
	Run() error
	// Start the service and not wait
	Start() error
	// Stop the service
	Stop() 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

type TracerOption func(*tracerOptions)

TracerOption func signature

func TracerBroker

func TracerBroker(n string) TracerOption

TracerBroker sets the broker for tracer

func TracerClient

func TracerClient(n string) TracerOption

TracerClient sets the clients for tracer

func TracerServer

func TracerServer(n string) TracerOption

TracerServer sets the servers for tracer

func TracerStore

func TracerStore(n string) TracerOption

TracerStore sets the store for tracer

Directories

Path Synopsis
Package broker is an interface used for asynchronous messaging
Package broker is an interface used for asynchronous messaging
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 microservice workflow
Package flow is an interface used for saga pattern microservice workflow
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 meter is for instrumentation
Package meter is for instrumentation
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 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 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
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
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
id
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
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

Jump to

Keyboard shortcuts

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