2 Unstar Star 0 Fork 0

JUMEI_ARCH / go-plugins

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Plugins License GoDoc Travis CI Go Report Card

A repository for micro plugins

Overview

Micro tooling is built on a powerful pluggable architecture. Plugins can be swapped out with zero code changes. This repository contains plugins for all micro related tools. Read on for further info.

Check out the Micro on NATS blog post to learn more about plugins.

Follow us on Twitter or join the Slack community.

Getting Started

Contents

Contents of this repository:

Directory Description
Broker PubSub messaging; NATS, NSQ, RabbitMQ, Kafka
Client RPC Clients; gRPC, HTTP
Codec Message Encoding; BSON, Mercury
Micro Micro Toolkit Plugins
Registry Service Discovery; Etcd, Gossip, NATS
Selector Load balancing; Label, Cache, Static
Server RPC Servers; gRPC, HTTP
Transport Bidirectional Streaming; NATS, RabbitMQ
Wrappers Middleware; Circuit Breakers, Rate Limiting, Tracing

Usage

Plugins can be added to go-micro in the following ways. By doing so they'll be available to set via command line args or environment variables.

Import Plugins

import (
	"gitee.com/JMArch/micro/cmd"
	_ "gitee.com/JMArch/go-plugins/broker/rabbitmq"
	_ "gitee.com/JMArch/go-plugins/registry/kubernetes"
	_ "gitee.com/JMArch/go-plugins/transport/nats"
)

func main() {
	// Parse CLI flags
	cmd.Init()
}

The same is achieved when calling service.Init

import (
	"gitee.com/JMArch/micro/"
	_ "gitee.com/JMArch/go-plugins/broker/rabbitmq"
	_ "gitee.com/JMArch/go-plugins/registry/kubernetes"
	_ "gitee.com/JMArch/go-plugins/transport/nats"
)

func main() {
	service := micro.NewService(
		// Set service name
		micro.Name("my.service"),
	)

	// Parse CLI flags
	service.Init()
}

Use via CLI Flags

Activate via a command line flag

go run service.go --broker=rabbitmq --registry=kubernetes --transport=nats

Use Plugins Directly

CLI Flags provide a simple way to initialise plugins but you can do the same yourself.

import (
	"gitee.com/JMArch/micro/"
	"gitee.com/JMArch/go-plugins/registry/kubernetes"
)

func main() {
	registry := kubernetes.NewRegistry() //a default to using env vars for master API

	service := micro.NewService(
		// Set service name
		micro.Name("my.service"),
		// Set service registry
		micro.Registry(registry),
	)
}

Build Pattern

An anti-pattern is modifying the main.go file to include plugins. Best practice recommendation is to include plugins in a separate file and rebuild with it included. This allows for automation of building plugins and clean separation of concerns.

Create file plugins.go

package main

import (
	_ "gitee.com/JMArch/go-plugins/broker/rabbitmq"
	_ "gitee.com/JMArch/go-plugins/registry/kubernetes"
	_ "gitee.com/JMArch/go-plugins/transport/nats"
)

Build with plugins.go

go build -o service main.go plugins.go

Run with plugins

MICRO_BROKER=rabbitmq \
MICRO_REGISTRY=kubernetes \
MICRO_TRANSPORT=nats \
service

Contributions

A few contributions by others

Feature Description Author
Registry/Kubernetes Service discovery via the Kubernetes API @nickjackson
Registry/Zookeeper Service discovery using Zookeeper @HeavyHorst

Comments ( 0 )

Sign in for post a comment

About

对应于micro的插件包 spread retract
Go
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

load more
can not load any more
Go
1
https://gitee.com/JMArch/go-plugins.git
git@gitee.com:JMArch/go-plugins.git
JMArch
go-plugins
go-plugins
master

Search

132457 8cb2edc1 1899542 131848 70c8d3a4 1899542