Micro是可插拔的工具库与框架,在go-plugins中您可以随意根据需要替换需要的插件。

micro工具集有独立的插件接口,查看micro/plugin了解更多。

下面是go-micro插件使用方式。

使用方式

go-micro中插件可以通过下面几种方式使用,可以通过命令行参数或者环境变量。

在Golang中引用插件代码,然后调用service.Init方法就会解析命令行、环境变量。

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

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

	// Parse CLI flags
	service.Init()
}

参数标识

您可以像下面这样声明参数标记:

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

环境变量

在启动应用前声明环境变量:

MICRO_BROKER=rabbitmq \
MICRO_REGISTRY=kubernetes \ 
MICRO_TRANSPORT=nats \ 
go run service.go

其它选项

在创建新服务前引入并设置选项:

import (
	"github.com/micro/go-micro"
	"github.com/micro/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),
	)
}

构建

不提倡直接在main.go文件中加入插件代码这种反模式的方式,推荐创建新的插件文件来引用插件。这样就可以自动构建插件并且插件与主逻辑分离。

创建新的文件,plugins.go,并引入需要的插件

package main

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

重新带上plugins.go构建成二进制文件

go build -o service main.go plugins.go

然后在启动时声明环境变量,变量会被加入的插件识别并使用

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

重新构建工具

如果想集成插件,那您只需要把插件引入单独的文件中,然后重新构建即可。

创建plugins.go,引入插件

import (
        // etcd v3 registry
        _ "github.com/micro/go-plugins/registry/etcdv3"
        // nats transport
        _ "github.com/micro/go-plugins/transport/nats"
        // kafka broker
        _ "github.com/micro/go-plugins/broker/kafka"
)

构建二进制文件

// 本地使用
go build -i -o micro ./main.go ./plugins.go

// docker镜像
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o micro ./main.go ./plugins.go

使用插件

micro --registry=etcdv3 --transport=nats --broker=kafka

源码仓库

go-micro插件集可以在github.com/micro/go-plugins中找到。