Go Micro插件

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

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

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

使用方式

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

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

  1. import (
  2. "github.com/micro/go-micro"
  3. _ "github.com/micro/go-plugins/broker/rabbitmq"
  4. _ "github.com/micro/go-plugins/registry/kubernetes"
  5. _ "github.com/micro/go-plugins/transport/nats"
  6. )
  7. func main() {
  8. service := micro.NewService(
  9. // Set service name
  10. micro.Name("my.service"),
  11. )
  12. // Parse CLI flags
  13. service.Init()
  14. }

参数标识

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

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

环境变量

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

  1. MICRO_BROKER=rabbitmq \
  2. MICRO_REGISTRY=kubernetes \
  3. MICRO_TRANSPORT=nats \
  4. go run service.go

其它选项

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

  1. import (
  2. "github.com/micro/go-micro"
  3. "github.com/micro/go-plugins/registry/kubernetes"
  4. )
  5. func main() {
  6. registry := kubernetes.NewRegistry() // a default to using env vars for master API
  7. service := micro.NewService(
  8. // Set service name
  9. micro.Name("my.service"),
  10. // Set service registry
  11. micro.Registry(registry),
  12. )
  13. }

构建

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

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

  1. package main
  2. import (
  3. _ "github.com/micro/go-plugins/broker/rabbitmq"
  4. _ "github.com/micro/go-plugins/registry/kubernetes"
  5. _ "github.com/micro/go-plugins/transport/nats"
  6. )

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

  1. go build -o service main.go plugins.go

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

  1. MICRO_BROKER=rabbitmq \
  2. MICRO_REGISTRY=kubernetes \
  3. MICRO_TRANSPORT=nats \
  4. service

重新构建工具

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

创建plugins.go,引入插件

  1. import (
  2. // etcd v3 registry
  3. _ "github.com/micro/go-plugins/registry/etcdv3"
  4. // nats transport
  5. _ "github.com/micro/go-plugins/transport/nats"
  6. // kafka broker
  7. _ "github.com/micro/go-plugins/broker/kafka"
  8. )

构建二进制文件

  1. // 本地使用
  2. go build -i -o micro ./main.go ./plugins.go
  3. // docker镜像
  4. CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o micro ./main.go ./plugins.go

使用插件

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

源码仓库

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