# 2.4 启动配置
# 2.4.1 基础介绍
启动配置(etc)主要用于引导程序启动的配置,默认启动配置文件为./etc/etc.toml。当然你也可以在配置目录添加自己额外的业务配置并进行读取(不推荐)。启动配置支持热更,但服务器组件一旦启动后,即便启动配置发生了变更,服务器组件也不再进行动态更新。
# 2.4.2 指定目录
你可以通过以下方式来指定启动配置读取目录:
- 通过环境变量指定,例如: DUE_ETC=/run/etc
- 通过启动参数指定,例如: --etc=./etc
目录指定优先级:环境变量 < 运行参数
注:无论你如何指定启动配置目录,etc.[toml|yaml|yml|json|xml]作为框架集群唯一的启动文件,一定不能修改,修改后会导致配置不生效或不可预期的后果。
# 2.4.3 支持格式
启动配置默认支持 toml (opens new window)、yaml (opens new window)、json (opens new window)、xml (opens new window) 等多种文件格式。你可以根据自身喜好自由选择文件格式。
注:yaml格式的配置支持.yaml和.yml两种后缀名
# 2.4.4 读写规则
框架中的配置文件均是以 文件名[.参数名1[.参数名2...[.参数名n]]] 的方式进行读写的。
注:例如a.b.c.d.toml这样的配置文件同样也是被支持的。读写时你只需要将a.b.c.d看成一个完整的文件名即可。
# 2.4.5 如何使用
- 安装依赖
$ go get github.com/dobyte/due/v2@v2.4.2
- 导入依赖
import "github.com/dobyte/due/v2/etc"
- 读取配置
timezone := etc.Get("etc.timezone", "UTC").String()
- 接口文档
https://pkg.go.dev/github.com/dobyte/due/v2/etc (opens new window)
# 2.4.6 示例代码
以下完整示例详见:etc-example (opens new window)
- 创建项目
$ mkdir etc-example
- 安装依赖
$ cd etc-example
$ go mod init etc-example
$ go get github.com/dobyte/due/v2@v2.4.2
2
3
- 启动配置
文件位置:etc-example/etc/db.toml (opens new window)
[mysql]
# dsn连接信息
dsn = "root:123456@tcp(127.0.0.1:3306)/game?charset=utf8mb4&parseTime=True&loc=Local"
# 日志级别; silent | error | warn | info
logLevel = "error"
# 慢日志阈值;ms
slowThreshold = 2000
# 最大空闲连接数
maxIdleConns = 50
# 最大打开连接数
maxOpenConns = 50
# 连接最大存活时间
connMaxLifetime = 3600
2
3
4
5
6
7
8
9
10
11
12
13
- 编写示例
文件位置:etc-example/main.go (opens new window)
package main
import (
"fmt"
"github.com/dobyte/due/v2/etc"
"github.com/dobyte/due/v2/log"
)
type config struct {
DSN string `json:"dsn"`
LogLevel string `json:"logLevel"`
SlowThreshold int `json:"slowThreshold"`
MaxIdleConns int `json:"maxIdleConns"`
MaxOpenConns int `json:"maxOpenConns"`
ConnMaxLifetime int `json:"connMaxLifetime"`
}
func main() {
// 读取单个配置参数
logLevel := etc.Get("db.mysql.logLevel").String()
fmt.Printf("mysql log-level: %s\n", logLevel)
// 读取多个配置参数
conf := &config{}
if err := etc.Get("db.mysql").Scan(conf); err != nil {
log.Errorf("get mysql error: %s", err)
}
fmt.Printf("mysql config: %+v\n", conf)
// 修改配置参数
if err := etc.Set("db.mysql.logLevel", "info"); err != nil {
log.Errorf("set mysql log-level error: %s", err)
}
// 读取单个配置参数
logLevel = etc.Get("db.mysql.logLevel").String()
fmt.Printf("mysql log-level: %s\n", logLevel)
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- 运行示例
$ cd etc-example
$ go run main.go
mysql log-level: error
mysql config: &{DSN:root:123456@tcp(127.0.0.1:3306)/game?charset=utf8mb4&parseTime=True&loc=Local LogLevel:error SlowThreshold:2000 MaxIdleConns:50 MaxOpenConns:50 ConnMaxLifetime:3600}
mysql log-level: info
2
3
4
5
# 2.4.7 全部配置
以下配置etc.toml (opens new window)为框架所有模块的详细配置,你可以根据自己模块使用情况进行选择性配置。
# 进程号
pid = "./run/due.pid"
# 开发模式。支持模式:debug、test、release(设置优先级:配置文件 < 环境变量 < 运行参数 < mode.SetMode())
mode = "debug"
# 统一时区设置。项目中的时间获取请使用xtime.Now()
timezone = "Local"
# 容器关闭最大等待时间。支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为0
shutdownMaxWaitTime = "0s"
# 分布式集群模块
[cluster]
# 集群网关配置
[cluster.gate]
# 实例ID,集群中唯一。不填写默认自动生成唯一的实例ID
id = ""
# 实例名称
name = "gate"
# 内建RPC服务器监听地址。不填写默认随机监听
addr = ":0"
# 是否将内部通信地址暴露到公网。默认为false
expose = false
# RPC调用超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3s
timeout = "3s"
# 无状态路由消息分发策略。支持策略:随机(random)、轮询(rr)、加权轮询(wrr)。默认为random
dispatch = "random"
# 实例元数据
[cluster.gate.metadata]
# 键值对,且均为字符串类型。由于注册中心的元数据参数限制,建议将键值对的数量控制在20个以内,键的字符长度控制在127个字符内,值得字符长度控制在512个字符内。
key = "value"
# 集群节点配置
[cluster.node]
# 实例ID,集群中唯一。不填写默认自动生成唯一的实例ID
id = ""
# 实例名称
name = "node"
# 内建RPC服务器监听地址。不填写默认随机监听
addr = ":0"
# 是否将内部通信地址暴露到公网。默认为false
expose = false
# 编解码器。可选:json | proto。默认为proto
codec = "proto"
# RPC调用超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3s
timeout = "3s"
# 节点权重,用于节点无状态路由消息的加权轮询策略,权重值必需大于0才生效。默认为1
weight = 1
# 实例元数据
[cluster.node.metadata]
# 键值对,且均为字符串类型。由于注册中心的元数据参数限制,建议将键值对的数量控制在20个以内,键的字符长度控制在127个字符内,值得字符长度控制在512个字符内。
key = "value"
# 集群网格配置
[cluster.mesh]
# 实例ID,集群中唯一。不填写默认自动生成唯一的实例ID
id = ""
# 实例名称
name = "mesh"
# 是否将内部通信地址暴露到公网。默认为false
expose = false
# 编解码器。可选:json | proto。默认为proto
codec = "proto"
# 实例元数据
[cluster.mesh.metadata]
# 键值对,且均为字符串类型。由于注册中心的元数据参数限制,建议将键值对的数量控制在20个以内,键的字符长度控制在127个字符内,值得字符长度控制在512个字符内。
key = "value"
# 集群客户端配置,常用于调试使用
[cluster.client]
# 实例ID,集群中唯一。不填写默认自动生成唯一的实例ID
id = ""
# 实例名称
name = "client"
# 编解码器。可选:json | proto。默认为proto
codec = "proto"
# 任务池模块
[task]
# 任务池大小(goroutine)
size = 100000
# 是否非阻塞
nonblocking = true
# 是否禁用清除。
disablePurge = true
# http服务器模块
[http]
# 服务器名称
name = "http"
# 服务器监听地址,默认为:8080
addr = ":8080"
# 是否启用控制台输出,默认为false
console = false
# body大小,支持单位: B | K | KB | M | MB | G | GB | T | TB | P | PB | E | EB | Z | ZB,默认为4 * 1024 * 1024
bodyLimit = "4M"
# 最大并发连接数,默认为256 * 1024
concurrency = 262144
# 是否启用严格路由模式,默认为false,启用后"/foo"与"/foo/"为两个不同的路由
strictRouting = false
# 是否区分路由大小写,默认为false, 启用后"/FoO"与"/foo"为两个不同的路由
caseSensitive = false
# 秘钥文件
keyFile = ""
# 证书文件
certFile = ""
# 跨域配置
[http.cors]
# 是否启用跨域
enable = false
# 允许跨域的请求源。默认为[],即为允许所有请求源
allowOrigins = []
# 允许跨域的请求方法。默认为["GET", "POST", "HEAD", "PUT", "DELETE", "PATCH"]
allowMethods = []
# 允许跨域的请求头部。默认为[],即为允许所有请求头部
allowHeaders = []
# 当允许所有源时,根据CORS规范不允许携带凭据。默认为false
allowCredentials = false
# 允许暴露给客户端的头部。默认为[],即为允许暴露所有头部
exposeHeaders = []
# 浏览器缓存预检请求结果的时间。默认为0
maxAge = 0
# 是否允许来自私有网络的请求。设置为true时,响应头Access-Control-Allow-Private-Network会被设置为true。默认为false
allowPrivateNetwork = false
# swagger文档配置
[http.swagger]
# 是否启用文档
enable = true
# API文档标题
title = "API文档"
# URL访问基础路径
basePath = "/swagger"
# swagger文件路径
filePath = "./docs/swagger.json"
# swagger-ui-bundle.js地址。当系统默认的cdn失效时可替换为自己的cdn地址,默认为空,使用系统默认https://unpkg.com/swagger-ui@5.28.1/dist/swagger-ui.js
swaggerBundleUrl = ""
# swagger-ui-standalone-preset.js地址。当系统默认的cdn失效时可替换为自己的cdn地址,默认为空,使用系统默认https://unpkg.com/swagger-ui@5.28.1/dist/swagger-ui-standalone-preset.js
swaggerPresetUrl = ""
# swagger-ui.css地址。当系统默认的cdn失效时可替换为自己的cdn地址,默认为空,使用系统默认https://unpkg.com/swagger-ui@5.28.1/dist/swagger-ui.css
swaggerStylesUrl = ""
# pprof模块
[pprof]
# pprof服务器监听地址
addr = ":0"
# 传输模块
[transport]
# GRPC相关配置
[transport.grpc]
# GRPC服务器相关配置
[transport.grpc.server]
# 服务器监听地址。空或:0时系统将会随机端口号
addr = ":0"
# 是否将内部通信地址暴露到公网。默认为false
expose = false
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# GRPC客户端相关配置
[transport.grpc.client]
# CA证书文件
caFile = ""
# 证书域名
serverName = ""
# RPCX相关配置
[transport.rpcx]
# RPCX服务器相关配置
[transport.rpcx.server]
# 服务器监听地址。空或:0时系统将会随机端口号
addr = ":0"
# 是否将内部通信地址暴露到公网。默认为false
expose = false
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# RPCX客户端相关配置
[transport.rpcx.client]
# CA证书文件
caFile = ""
# 证书域名
serverName = ""
# 连接池大小,默认为10
poolSize = 10
# 框架默认打包器统一采用以下的打包格式,自定义打包器可自行定义打包规则
# 心跳包
# ------------------------------------------------------------------------------
# | size(4 byte) = (1 byte + 8 byte) | header(1 byte) | heartbeat time(8 byte) |
# ------------------------------------------------------------------------------
#
# 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
# +---------------------------------------------------------------+-+-------------+---------------------------------------------------------------+
# | size |h| extcode | heartbeat time (ns) |
# +---------------------------------------------------------------+-+-------------+---------------------------------------------------------------+
# 数据包
# -----------------------------------------------------------------------------------------------------------------------
# | size(4 byte) = (1 byte + n byte + m byte + x byte) | header(1 byte) | route(n byte) | seq(m byte) | message(x byte) |
# -----------------------------------------------------------------------------------------------------------------------
#
# 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
# +---------------------------------------------------------------+-+-------------+-------------------------------+-------------------------------+
# | size |h| extcode | route | seq |
# +---------------------------------------------------------------+-+-------------+-------------------------------+-------------------------------+
# | message data ... |
# +-----------------------------------------------------------------------------------------------------------------------------------------------+
[packet]
# 字节序,默认为big。可选:little | big
byteOrder = "big"
# 路由字节数,默认为2字节
routeBytes = 2
# 序列号字节数,默认为2字节
seqBytes = 2
# 消息字节数,默认为5000字节
bufferBytes = 5000
# 日志模块
[log]
# 日志输出级别,可选:debug | info | warn | error | fatal | panic
level = "info"
# 堆栈的最低输出级别,可选:debug | info | warn | error | fatal | panic
stackLevel = "error"
# 时间格式,标准库时间格式
timeFormat = "2006/01/02 15:04:05.000000"
# 输出栈的跳过深度
callSkip = 2
# 是否启用调用文件全路径
callFullPath = true
# 日志输出终端(数组和对象两种配置形式任选其一)
terminals = ["console", "file"]
# 日志输出终端(数组和对象两种配置形式任选其一)
[log.terminals]
# 控制台 -> 日志级别
console = ["debug", "info", "warn", "error", "fatal", "panic"]
# 文件 -> 日志级别
file = ["debug", "info", "warn", "error", "fatal", "panic"]
# 阿里云日志 -> 日志级别
aliyun = ["debug", "info", "warn", "error", "fatal", "panic"]
# 腾讯云日志 -> 日志级别
tencent = ["debug", "info", "warn", "error", "fatal", "panic"]
# 控制台同步器配置
[log.console]
# 日志输出格式,可选:text | json
format = "text"
# 文件同步器配置
[log.file]
# 输出文件路径
path = "./log/due.log"
# 日志输出格式,可选:text | json
format = "text"
# 文件最大留存时间,d:天、h:时、m:分、s:秒
maxAge = "7d"
# 文件最大尺寸限制,支持单位: B | K | KB | M | MB | G | GB | T | TB | P | PB | E | EB | Z | ZB,默认为100M
maxSize = "100M"
# 文件翻转方式,可选:none | year | month | week | day | hour,默认为none
rotate = "none"
# 文件翻转时是否对文件进行压缩
compress = false
# 阿里云SLS日志同步器配置
[log.aliyun]
# 服务域名,公网使用公网域名,内网使用私网域名
endpoint = "cn-chengdu.log.aliyuncs.com"
# 访问密钥ID
accessKeyID = ""
# 访问密钥密码
accessKeySecret = ""
# 项目名称
project = "due-test"
# 日志存储
logstore = "app"
# 主题标签,默认为空
topic = ""
# 来源标签,默认为空
source = ""
# 腾讯云CLS日志服务同步器
[log.tencent]
# 服务域名,公网使用公网域名,内网使用私网域名
endpoint = "ap-guangzhou.cls.tencentcs.com"
# 访问密钥ID
accessKeyID = ""
# 访问密钥密码
accessKeySecret = ""
# 主题ID
topicID = ""
# 注册中心模块
[registry]
# etcd注册中心
[registry.etcd]
# 客户端连接地址,默认为["127.0.0.1:2379"]
addrs = ["127.0.0.1:2379"]
# 客户端拨号超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为5s
dialTimeout = "5s"
# 命名空间,默认为services
namespace = "services"
# 超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3s
timeout = "3s"
# 心跳重试次数,默认为3
retryTimes = 3
# 心跳重试间隔,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
retryInterval = "10s"
# consule注册中心
[registry.consul]
# 客户端连接地址,默认为127.0.0.1:8500
addr = "127.0.0.1:8500"
# 是否启用健康检查,默认为true
healthCheck = true
# 健康检查时间间隔(秒),仅在启用健康检查后生效,默认为10
healthCheckInterval = 10
# 健康检查超时时间(秒),仅在启用健康检查后生效,默认为5
healthCheckTimeout = 5
# 是否启用心跳检查,默认为true
heartbeatCheck = true
# 心跳检查时间间隔(秒),仅在启用心跳检查后生效,默认为10
heartbeatCheckInterval = 10
# 健康检测失败后自动注销服务时间(秒),默认为30
deregisterCriticalServiceAfter = 30
# nacos注册中心
[registry.nacos]
# 服务器地址 [scheme://]ip:port[/nacos]。默认为["http://127.0.0.1:8848/nacos"]
urls = ["http://127.0.0.1:8848/nacos"]
# 集群名称。默认为DEFAULT
clusterName = "DEFAULT"
# 群组名称。默认为DEFAULT_GROUP
groupName = "DEFAULT_GROUP"
# 请求Nacos服务端超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3秒
timeout = "3s"
# ACM的命名空间Id。默认为空
namespaceId = ""
# 当使用ACM时,需要该配置,默认为空。详见:https://help.aliyun.com/document_detail/130146.html
endpoint = ""
# ACM&KMS的regionId,用于配置中心的鉴权。默认为空
regionId = ""
# ACM&KMS的AccessKey,用于配置中心的鉴权。默认为空
accessKey = ""
# ACM&KMS的SecretKey,用于配置中心的鉴权。默认为空
secretKey = ""
# 是否开启kms,同时DataId必须以"cipher-"作为前缀才会启动加解密逻辑。kms可以参考文档:https://help.aliyun.com/product/28933.html
openKMS = false
# 缓存service信息的目录。默认为./run/nacos/naming/cache
cacheDir = "./run/nacos/naming/cache"
# Nacos服务端的API鉴权Username。默认为空
username = ""
# Nacos服务端的API鉴权Password。默认为空
password = ""
# 日志存储路径。默认为./run/nacos/naming/log
logDir = "./run/nacos/naming/log"
# 日志输出级别,可选:debug、info、warn、error。默认为info
logLevel = "info"
# 配置中心模块
[config]
# 文件配置
[config.file]
# 配置文件或配置目录路径
path = "./config"
# 读写模式。可选:read-only | write-only | read-write,默认为read-only
mode = "read-only"
# etcd配置中心
[config.etcd]
# 客户端连接地址,默认为["127.0.0.1:2379"]
addrs = ["127.0.0.1:2379"]
# 客户端拨号超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为5s
dialTimeout = "5s"
# 路径。默认为/config
path = "/config"
# 读写模式。可选:read-only | write-only | read-write,默认为read-only
mode = "read-only"
# consul配置中心
[config.consul]
# 客户端连接地址
addr = "127.0.0.1:8500"
# 路径。默认为config
path = "config"
# 读写模式。可选:read-only | write-only | read-write,默认为read-only
mode = "read-only"
# nacos配置中心
[config.nacos]
# 读写模式。可选:read-only | write-only | read-write,默认为read-only
mode = "read-only"
# 服务器地址 [scheme://]ip:port[/nacos]。默认为["http://127.0.0.1:8848/nacos"]
urls = ["http://127.0.0.1:8848/nacos"]
# 集群名称。默认为DEFAULT
clusterName = "DEFAULT"
# 群组名称。默认为DEFAULT_GROUP
groupName = "DEFAULT_GROUP"
# 请求Nacos服务端超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3秒
timeout = "3s"
# ACM的命名空间Id。默认为空
namespaceId = ""
# 当使用ACM时,需要该配置,默认为空。详见:https://help.aliyun.com/document_detail/130146.html
endpoint = ""
# ACM&KMS的regionId,用于配置中心的鉴权。默认为空
regionId = ""
# ACM&KMS的AccessKey,用于配置中心的鉴权。默认为空
accessKey = ""
# ACM&KMS的SecretKey,用于配置中心的鉴权。默认为空
secretKey = ""
# 是否开启kms,同时DataId必须以"cipher-"作为前缀才会启动加解密逻辑。kms可以参考文档:https://help.aliyun.com/product/28933.html
openKMS = false
# 缓存service信息的目录。默认为./run/nacos/naming/cache
cacheDir = "./run/nacos/config/cache"
# Nacos服务端的API鉴权Username。默认为空
username = ""
# Nacos服务端的API鉴权Password。默认为空
password = ""
# 日志存储路径。默认为./run/nacos/naming/log
logDir = "./run/nacos/config/log"
# 日志输出级别,可选:debug、info、warn、error。默认为info
logLevel = "info"
# 网络模块
[network]
# ws网络模块
[network.ws]
# ws网络服务器
[network.ws.server]
# 服务器监听地址
addr = ":3553"
# 客户端连接路径
path = "/"
# 服务器最大连接数
maxConnNum = 5000
# 秘钥文件
keyFile = ""
# 证书文件
certFile = ""
# 跨域检测,空数组时不允许任何连接升级成websocket,未设置此参数时允许所有的链接升级成websocket
origins = ["*"]
# 握手超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
handshakeTimeout = "10s"
# 心跳检测间隔时间。设置为0则不启用心跳检测,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
heartbeatInterval = "10s"
# 心跳机制,默认为resp响应式心跳。可选:resp 响应式心跳 | tick 定时主推心跳
heartbeatMechanism = "resp"
# 授权超时时间,(在客户端建立连接后,如果在授权超时时间内未进行绑定用户操作,则被认定为未授权连接,服务器会强制断开连接)支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为0s,不进行授权检测
authorizeTimeout = "0s"
# ws网络客户端
[network.ws.client]
# 拨号地址
url = "ws://127.0.0.1:3553"
# 握手超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
handshakeTimeout = "10s"
# 心跳间隔时间;设置为0则不启用心跳检测,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
heartbeatInterval = "10s"
# tcp网络模块
[network.tcp]
# tcp网络服务器
[network.tcp.server]
# 服务器监听地址
addr = ":3553"
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# 服务器最大连接数
maxConnNum = 5000
# 心跳间隔时间;设置为0则不启用心跳检测,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
heartbeatInterval = "10s"
# 心跳机制,默认resp
heartbeatMechanism = "resp"
# 授权超时时间,(在客户端建立连接后,如果在授权超时时间内未进行绑定用户操作,则被认定为未授权连接,服务器会强制断开连接)支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为0s,不进行授权检测
authorizeTimeout = "0s"
# tcp网络客户端
[network.tcp.client]
# 拨号地址
addr = "127.0.0.1:3553"
# 拨号超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为5s
timeout = "5s"
# CA证书文件
caFile = ""
# 证书域名
serverName = ""
# 心跳间隔时间;设置为0则不启用心跳检测,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
heartbeatInterval = "10s"
# 用户定位器模块
[locate]
# redis定位模块
[locate.redis]
# 客户端连接地址
addrs = ["127.0.0.1:6379"]
# 数据库号
db = 0
# 用户名
username = ""
# 密码
password = ""
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# CA证书文件
caFile = ""
# 最大重试次数
maxRetries = 3
# key前缀
prefix = "due:locate"
# 缓存模块
[cache]
# redis缓存模块
[cache.redis]
# 客户端连接地址
addrs = ["127.0.0.1:6379"]
# 数据库号
db = 0
# 用户名
username = ""
# 密码
password = ""
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# CA证书文件
caFile = ""
# 最大重试次数
maxRetries = 3
# key前缀,默认为cache
prefix = "due:cache"
# 空值,默认为cache@nil
nilValue = "cache@nil"
# 空值过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
nilExpiration = "10s"
# 最小过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为1h
minExpiration = "1h"
# 最大过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为24h
maxExpiration = "24h"
# memcache缓存模块
[cache.memcache]
# 客户端连接地址
addrs = ["127.0.0.1:11211"]
# key前缀,默认为cache
prefix = "due:cache"
# 空值,默认为cache@nil
nilValue = "cache@nil"
# 空值过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
nilExpiration = "10s"
# 最小过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为1h
minExpiration = "1h"
# 最大过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为24h
maxExpiration = "24h"
# 分布式锁模块
[lock]
# redis分布式锁模块
[lock.redis]
# 客户端连接地址
addrs = ["127.0.0.1:6379"]
# 数据库号
db = 0
# 用户名
username = ""
# 密码
password = ""
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# CA证书文件
caFile = ""
# 最大重试次数
maxRetries = 3
# key前缀
prefix = "due:lock"
# 锁过期时间(自动续约),支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3s
expiration = "3s"
# 循环获取锁的频率间隔时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为20ms
acquireInterval = "20ms"
# 循环获取锁的最大重试次数,默认为0,<=0则为无限次
acquireMaxRetries = 0
# memcache分布式锁模块
[lock.memcache]
# 客户端连接地址
addrs = ["127.0.0.1:11211"]
# key前缀
prefix = "due:lock"
# 锁过期时间(自动续约),支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为3s
expiration = "3s"
# 循环获取锁的频率间隔时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为20ms
acquireInterval = "20ms"
# 循环获取锁的最大重试次数,默认为0,<=0则为无限次
acquireMaxRetries = 0
# 加密模块
[crypto]
# RSA加密模块
[crypto.rsa]
[crypto.rsa.encryptor]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 填充规则,不区分大小写。可选:NORMAL | OAEP
padding = "NORMAL"
# 标签,加解密时必需一致
label = ""
# 加密数据块大小,单位字节。由于加密数据长度限制,需要对加密数据进行分块儿加密
blockSize = 0
# 公钥,可设置文件路径或公钥串
publicKey = ""
[crypto.rsa.decryptor]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 填充规则,不区分大小写。可选:NORMAL | OAEP
padding = "NORMAL"
# 标签。加解密时必需一致
label = ""
# 私钥。可设置文件路径或私钥串
privateKey = ""
[crypto.rsa.signer]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 填充规则,不区分大小写。可选:PKCS | PSS
padding = "PSS"
# 私钥。可设置文件路径或私钥串
privateKey = ""
[crypto.rsa.verifier]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 填充规则,不区分大小写。可选:PKCS | PSS
padding = "PSS"
# 公钥,可设置文件路径或公钥串
publicKey = ""
# ECC加密模块
[crypto.ecc]
[crypto.ecc.encryptor]
# 共享信息。加解密时必需一致
s1 = ""
# 共享信息。加解密时必需一致
s2 = ""
# 公钥,可设置文件路径或公钥串
publicKey = ""
[crypto.ecc.decryptor]
# 共享信息。加解密时必需一致
s1 = ""
# 共享信息。加解密时必需一致
s2 = ""
# 私钥。可设置文件路径或私钥串
privateKey = ""
[crypto.ecc.signer]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 签名分隔符。由于ECDSA签名算法会产生两段签名串,因此需要通过分隔符将其拼接为一个签名
delimiter = " "
# 私钥。可设置文件路径或私钥串
privateKey = ""
[crypto.ecc.verifier]
# hash算法,不区分大小写。可选:SHA1 | SHA224 | SHA256 | SHA384 | SHA512
hash = "SHA256"
# 签名分隔符。由于ECDSA签名算法会产生两段签名串,因此需要通过分隔符将其拼接为一个签名
delimiter = " "
# 公钥,可设置文件路径或公钥串
publicKey = ""
# 事件总线模块
[eventbus]
# nats事件总线模块
[eventbus.nats]
# 客户端连接地址,默认为nats://127.0.0.1:4222
url = "nats://127.0.0.1:4222"
# 客户端连接超时时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为2s
timeout = "2s"
# key前缀
prefix = "due:eventbus"
# redis事件总线模块
[eventbus.redis]
# 客户端连接地址
addrs = ["127.0.0.1:6379"]
# 数据库号
db = 0
# 用户名
username = ""
# 密码
password = ""
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# CA证书文件
caFile = ""
# 最大重试次数
maxRetries = 3
# key前缀
prefix = "due:eventbus"
# kafka事件总线模块
[eventbus.kafka]
# 客户端连接地址
addrs = ["127.0.0.1:9092"]
# Kafka版本,默认为无版本
version = ""
# key前缀
prefix = "due:eventbus"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690