应用私有

简要概述

对于通过 grpc-kit-cli 生成的每个微服务模版,如果它们存在需要个性化配置与数据结构,那么可以在这里定义。

配置示例

independent:
  name: grpc-kit

数据结构

在 github.com/grpc-kit/pkg/cfg 中内置的数据结构,这个由框架管理,用户无法自定义:

type LocalConfig struct {
    ......
    Independent interface{} `json:",omitempty"` // 应用私有配置
    ......
}

在生成各服务模版的结构,这个由用户自定义:

package modeler

// IndependentCfg 个性配置
type IndependentCfg struct {
	Name string `mapstructure:"name"`
}

// Init 用于初始化实例
func (i *IndependentCfg) Init() error {
	// 业务代码

	return nil
}

应用场景

一个自定义服务

生成以下 app.yaml 配置项:

# 应用私有配置
independent:
  # 消息数据写入kafka的topic
  message:
    cmdb:
      # 资产类信息
      topic: uptime-alertmanager
    metric:
      # 性能指标类
      topic: uptime

  # 主机注册的相关配置
  registry:
    default:
      host_ttl: 60
      heartbeat: 10

在对应的 modeler/independent_cfg.go 中数据结构为:

// IndependentCfg 个性配置
type IndependentCfg struct {
	Message MessageConfig `mapstructure:"message"`
	Registry RegistryConfig `mapstructure:"registry"`
}

// MessageConfig 用于kafka消息的配置
type MessageConfig struct {
	CMDB struct {
		Topic string `mapstructure:"topic"`
	} `mapstructure:"cmdb"`

	Metric struct {
		Topic string `mapstructure:"topic"`
		Drop  bool   `mapstructure:"drop"`
	} `mapstructure:"metric"`
}

// RegistryConfig xx
type RegistryConfig struct {
	Default     ConfigContent  `mapstructure:"default"`
}

// ConfigContent 一个具体的配置项
type ConfigContent struct {
	// Address 隧道的地址
	Address []string `mapstructure:"address"`
	// 主机注册存活的时间
	HostTTL int `mapstructure:"host_ttl"`
	// 维持主机心跳时间,必须小于 host_ttl
	Heartbeat int `mapstructure:"heartbeat"`
}