1. 插件

前言: Go Micro 是一个可插拔的框架

2. 概述

Go Micro 构建于 Go 接口之上. 因此这些接口的实现是可插拔的.

默认情况下, go-micro 只提供核心上每个接口的几个实现, 但它是完全可插拔的. 已经有几十个插件, 在这里 github.com/micro/go-plugins 欢迎贡献! 插件可确保 Go Micro 服务在技术发展后长期保持生存。

2.1.1. 添加插件

如果要集成插件, 只需将它们链接到单独的文件中并重新生成

创建 plugins.go 文件并导入所需的插件:

package main

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

通过包含插件文件来构建应用程序:

# assuming files main.go and plugins.go are in the top level dir

# For local use
go build -o service *.go

插件的标志用法:

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

或者首选的是使用环境变量来处理 12 因素的应用程序

MICRO_REGISTRY=consul
MICRO_TRANSPORT=rabbitmq
MICRO_BROKER=kafka
service

2.1.2. 插件选项

或者您可以将插件设置为直接在代码中服务的选项

package main

import (
        "github.com/micro/go-micro/v2" 
        // consul registry
        "github.com/micro/go-plugins/registry/consul"
        // rabbitmq transport
        "github.com/micro/go-plugins/transport/rabbitmq"
        // kafka broker
        "github.com/micro/go-plugins/broker/kafka"
)

func main() {
    registry := consul.NewRegistry()
    broker := kafka.NewBroker()
    transport := rabbitmq.NewTransport()

        service := micro.NewService(
                micro.Name("greeter"),
                micro.Registry(registry),
                micro.Broker(broker),
                micro.Transport(transport),
        )

    service.Init()
    service.Run()
}

2.1.3. 编写插件

插件是一个建立在 Go 接口上的概念. 每个包都维护一个高级接口抽象. 只需实现接口并将其作为服务选项传递给它即可.

服务发现接口称为 Registry. 实现此接口的任何内容都可以用作注册表. 这同样适用于其他包.

type Registry interface {
    Register(*Service, ...RegisterOption) error
    Deregister(*Service) error
    GetService(string) ([]*Service, error)
    ListServices() ([]*Service, error)
    Watch() (Watcher, error)
    String() string
}

参阅 go-plugins 更好地了解实现细节.

results matching ""

    No results matching ""