1. 框架
Micro 是一个可插拔的工具包和框架. 内部功能可以与任何 插件 置换.
该工具包具有单独的插件接口. 可参阅 micro/plugin 了解更多信息.
以下是有关 go-micro 插件使用情况的信息.
1.1. 使用
插件可以通过以下方式添加到 go-micro. 通过这样做它们可以通过命令行参数或环境变量进行设置.
导入 Go 程序中的插件, 然后调用服务. 初始化以分析命令行和环境变量.
import (
"github.com/micro/go-micro/v2"
_ "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()
}
1.1.1. 标志
将插件指定为标志
go run service.go --broker=rabbitmq --registry=kubernetes --transport=nats
1.1.2. 环境变量
使用环境变量指定插件
MICRO_BROKER=rabbitmq
MICRO_REGISTRY=kubernetes \
MICRO_TRANSPORT=nats \
go run service.go
1.1.3. 选项
创建新服务时, 导入并设置为选项
import (
"github.com/micro/go-micro/v2"
"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),
)
}
1.2. 构建
修改 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"
)
使用插件构建.
go build -o service main.go plugins.go
使用插件运行
MICRO_BROKER=rabbitmq
MICRO_REGISTRY=kubernetes
MICRO_TRANSPORT=nats
service
1.3. 重建工具包
如果要集成插件, 只需将它们链接到单独的文件中并重新生成
创建 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"
)
生成二进制
// For local use
go build -i -o micro ./main.go ./plugins.go
// For docker image
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
1.4. 仓库
go-micro 的插件可以在此仓库 github.com/micro/go-plugins 找到.