api配置控制著api服務(wù)中的各種功能,包含但不限于服務(wù)監(jiān)聽地址,端口,環(huán)境配置,日志配置等,下面我們從一個簡單的配置來看一下api中常用配置分別有什么作用。
通過yaml配置我們會發(fā)現(xiàn),有很多參數(shù)我們并沒有與config對齊,這是因?yàn)閏onfig定義中,有很多都是帶optional或者default 標(biāo)簽的,對于optional可選項(xiàng),你可以根據(jù)自己需求判斷是否需要設(shè)置,對于default標(biāo)簽,如果你覺得默認(rèn)值就已經(jīng)夠了,可以不用設(shè)置, 一般default中的值基本不用修改,可以認(rèn)為是最佳實(shí)踐值。
type Config struct{
rest.RestConf // rest api配置
Auth struct { // jwt鑒權(quán)配置
AccessSecret string // jwt密鑰
AccessExpire int64 // 有效期,單位:秒
}
Mysql struct { // 數(shù)據(jù)庫配置,除mysql外,可能還有mongo等其他數(shù)據(jù)庫
DataSource string // mysql鏈接地址,滿足 $user:$password@tcp($ip:$port)/$db?$queries 格式即可
}
CacheRedis cache.CacheConf // redis緩存
UserRpc zrpc.RpcClientConf // rpc client配置
}
api服務(wù)基礎(chǔ)配置,包含監(jiān)聽地址,監(jiān)聽端口,證書配置,限流,熔斷參數(shù),超時參數(shù)等控制,對其展開我們可以看到:
service.ServiceConf // service配置
Host string `json:",default=0.0.0.0"` // http監(jiān)聽ip,默認(rèn)0.0.0.0
Port int // http監(jiān)聽端口,必填
CertFile string `json:",optional"` // https證書文件,可選
KeyFile string `json:",optional"` // https私鑰文件,可選
Verbose bool `json:",optional"` // 是否打印詳細(xì)http請求日志
MaxConns int `json:",default=10000"` // http同時可接受最大請求數(shù)(限流數(shù)),默認(rèn)10000
MaxBytes int64 `json:",default=1048576,range=[0:8388608]"` // http可接受請求的最大ContentLength,默認(rèn)1048576,被設(shè)置值不能必須在0到8388608之間
// milliseconds
Timeout int64 `json:",default=3000"` // 超時時長控制,單位:毫秒,默認(rèn)3000
CpuThreshold int64 `json:",default=900,range=[0:1000]"` // cpu降載閾值,默認(rèn)900,可允許設(shè)置范圍0到1000
Signature SignatureConf `json:",optional"` // 簽名配置
type ServiceConf struct {
Name string // 服務(wù)名稱
Log logx.LogConf // 日志配置
Mode string `json:",default=pro,options=dev|test|pre|pro"` // 服務(wù)環(huán)境,dev-開發(fā)環(huán)境,test-測試環(huán)境,pre-預(yù)發(fā)環(huán)境,pro-正式環(huán)境
MetricsUrl string `json:",optional"` // 指標(biāo)上報接口地址,該地址需要支持post json即可
Prometheus prometheus.Config `json:",optional"` // prometheus配置
}
type LogConf struct {
ServiceName string `json:",optional"` // 服務(wù)名稱
Mode string `json:",default=console,options=console|file|volume"` // 日志模式,console-輸出到console,file-輸出到當(dāng)前服務(wù)器(容器)文件,,volume-輸出docker掛在文件內(nèi)
Path string `json:",default=logs"` // 日志存儲路徑
Level string `json:",default=info,options=info|error|severe"` // 日志級別
Compress bool `json:",optional"` // 是否開啟gzip壓縮
KeepDays int `json:",optional"` // 日志保留天數(shù)
StackCooldownMillis int `json:",default=100"` // 日志write間隔
}
type Config struct {
Host string `json:",optional"` // prometheus 監(jiān)聽host
Port int `json:",default=9101"` // prometheus 監(jiān)聽端口
Path string `json:",default=/metrics"` // 上報地址
}
SignatureConf struct {
Strict bool `json:",default=false"` // 是否Strict模式,如果是則PrivateKeys必填
Expiry time.Duration `json:",default=1h"` // 有效期,默認(rèn)1小時
PrivateKeys []PrivateKeyConf // 簽名密鑰相關(guān)配置
}
PrivateKeyConf struct {
Fingerprint string // 指紋配置
KeyFile string // 密鑰配置
}
ClusterConf []NodeConf
NodeConf struct {
redis.RedisConf
Weight int `json:",default=100"` // 權(quán)重
}
RedisConf struct {
Host string // redis地址
Type string `json:",default=node,options=node|cluster"` // redis類型
Pass string `json:",optional"` // redis密碼
}
更多建議: