2023-12-21 22:17:40 +08:00
|
|
|
|
package configcenter
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
|
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 默认配置
|
|
|
|
|
type DefaultConfig struct {
|
|
|
|
|
Log LoggerConfig `json:"log" yaml:"log"` // 日志配置
|
|
|
|
|
App AppConfig `json:"app" yaml:"app"` // 服务配置
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 日志配置
|
|
|
|
|
type LoggerConfig struct {
|
|
|
|
|
StdoutEnable bool `json:"stdout_enable" yaml:"stdout_enable"` // 是否允许控制台输出
|
|
|
|
|
StdoutLevel string `json:"stdout_level" yaml:"stdout_level"` // 控制台输出日志等级
|
|
|
|
|
|
|
|
|
|
FileEnable bool `json:"file_enable" yaml:"file_enable"` // 是否允许写文件
|
|
|
|
|
FileLevel string `json:"file_level" yaml:"file_level"` // 文件输出日志等级
|
|
|
|
|
FileAbsPath string `json:"file_abs_path" yaml:"file_abs_path"` // 日志文件绝对路径
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 服务配置
|
|
|
|
|
type AppConfig struct {
|
|
|
|
|
AppName string `json:"app_name" yaml:"app_name"` // 服务名
|
|
|
|
|
Ip string `json:"ip" yaml:"ip"` // ip
|
|
|
|
|
Port int `json:"port" yaml:"port"` // 端口
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mongo配置
|
|
|
|
|
type MongoConfig struct {
|
|
|
|
|
Uri string `json:"uri" yaml:"uri"` // 实例地址
|
|
|
|
|
Username string `json:"username" yaml:"username"` // 用户名
|
|
|
|
|
Password string `json:"password" yaml:"password"` // 密码
|
|
|
|
|
MaxPoolSize uint64 `json:"max_pool_size" yaml:"max_pool_size"` // 最大连接池
|
|
|
|
|
ConnectionTimeoutMs int64 `json:"connection_timeout_ms" yaml:"connection_timeout_ms"` // 连接超时ms
|
|
|
|
|
SocketTimeoutMs int64 `json:"socket_timeout_ms" yaml:"socket_timeout_ms"` // socket连接超时ms
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mysql配置
|
|
|
|
|
type MysqlConfig struct {
|
|
|
|
|
Uri string `json:"uri" yaml:"uri"` // 实例地址,ip+端口
|
|
|
|
|
Username string `json:"username" yaml:"username"` // 用户名
|
|
|
|
|
Password string `json:"password" yaml:"password"` // 密码
|
|
|
|
|
TimeoutS int `json:"timeout" yaml:"timeout"` // 超时,秒
|
|
|
|
|
ReadTimeoutS int `json:"read_timeout_s" yaml:"read_timeout_s"` // 读超时,秒
|
|
|
|
|
WriteTimeoutS int `json:"write_timeout_s" yaml:"write_timeout_s"` // 写超时,秒
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// redis配置
|
|
|
|
|
type RedisConfig struct {
|
|
|
|
|
Uri string `json:"uri" yaml:"uri"` // 实例地址,ip+端口
|
|
|
|
|
Password string `json:"password" yaml:"password"` // 鉴权密码
|
|
|
|
|
MaxActive int `json:"max_active" yaml:"max_active"` // 最大活动连接数,值为0时表示不限制
|
|
|
|
|
MaxIdle int `json:"max_idle" yaml:"max_idle"` // 最大空闲连接数
|
|
|
|
|
IdleTimeout int `json:"idle_timeout" yaml:"idle_timeout"` // 空闲连接的超时时间,超过该时间则关闭连接。单位为秒。默认值是5分钟。值为0时表示不关闭空闲连接。此值应该总是大于redis服务的超时时间。
|
|
|
|
|
Prefix string `json:"prefix" yaml:"prefix"` // key的前缀
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 微信支付客户端配置
|
|
|
|
|
type WxpayClientConfig struct {
|
2024-02-05 21:55:44 +08:00
|
|
|
|
MchId string `json:"mchid" yaml:"mchid"` // 商户id
|
|
|
|
|
AppId string `json:"appid" yaml:"appid"` // appid
|
|
|
|
|
SerialNo string `json:"serial_no" yaml:"serial_no"` // 商户API证书的证书序列号
|
|
|
|
|
ApiV3Key string `json:"apiv3_key" yaml:"apiv3_key"` // APIv3Key,商户平台获取
|
|
|
|
|
PrivateKeyPath string `json:"private_key_path" yaml:"private_key_path"` // 商户API证书下载后,私钥 apiclient_key.pem 读取后的字符串内容
|
|
|
|
|
NotifyUrl string `json:"notify_url" yaml:"notify_url"` // 回调地址
|
2024-02-20 23:05:24 +08:00
|
|
|
|
AppSecret string `json:"app_secret" yaml:"app_secret"` //
|
2023-12-21 22:17:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 账号相关验密配置
|
|
|
|
|
type CryptoConfig struct {
|
|
|
|
|
*AESConfig `json:"aes" yaml:"aes"` //AES
|
|
|
|
|
*RSAConfig `json:"rsa" yaml:"rsa"` //RSA
|
|
|
|
|
*TokenConfig `json:"token" yaml:"token"` //token签名
|
|
|
|
|
*SHA256Config `json:"sha256" yaml:"sha256"` //SHA256
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 支付宝客户端配置
|
|
|
|
|
type AlipayClientConfig struct {
|
2024-02-12 23:41:41 +08:00
|
|
|
|
Appid string `json:"appid" yaml:"appid"` // 商户id
|
|
|
|
|
PrivateKey string `json:"private_key" yaml:"private_key"` // 私钥
|
|
|
|
|
NotifyUrl string `json:"notify_url" yaml:"notify_url"` // 回调地址
|
|
|
|
|
AppCertPath string `json:"app_cert_path" yaml:"app_cert_path"`
|
|
|
|
|
AlipayRootCertPath string `json:"alipay_root_cert_path" yaml:"alipay_root_cert_path"`
|
|
|
|
|
AlipayPublicCertPath string `json:"alipay_public_cert_path" yaml:"alipay_public_cert_path"`
|
2023-12-21 22:17:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Apollo配置
|
|
|
|
|
type ApolloConfig struct {
|
|
|
|
|
AppID string `json:"app_id" yaml:"app_id"`
|
|
|
|
|
Cluster string `json:"cluster" yaml:"cluster"`
|
|
|
|
|
IP string `json:"ip" yaml:"ip"`
|
|
|
|
|
NamespaceName string `json:"namespace_name" yaml:"namespace_name"`
|
|
|
|
|
Secret string `json:"secret" yaml:"secret"`
|
|
|
|
|
IsBackUpConfig bool `json:"is_back_up_config" yaml:"is_back_up_config"`
|
|
|
|
|
SyncServerTimeout int `json:"sync_server_timeout" yaml:"sync_server_timeout"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 媒体服务配置
|
|
|
|
|
type MediaConfig struct {
|
|
|
|
|
AccessKey string `json:"access_key" yaml:"access_key"`
|
|
|
|
|
AccessSecret string `json:"access_secret" yaml:"access_secret"`
|
|
|
|
|
Endpoint string `json:"endpoint" yaml:"endpoint"`
|
|
|
|
|
Bucket string `json:"bucket" yaml:"bucket"`
|
|
|
|
|
CallbackUrl string `json:"callback_url" yaml:"callback_url"`
|
|
|
|
|
ExpireTime int64 `json:"expire_time" yaml:"expire_time"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 阿里云短信服务配置
|
|
|
|
|
type DysmsapiConfig struct {
|
|
|
|
|
AccessKeyId string `json:"access_key_id" yaml:"access_key_id"`
|
|
|
|
|
AccessKeySecret string `json:"access_key_secret" yaml:"access_key_secret"`
|
|
|
|
|
SignName string `json:"sign_name" yaml:"sign_name"`
|
|
|
|
|
TemplateCode string `json:"template_code" yaml:"template_code"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 图片内容审核服务配置
|
|
|
|
|
type ImageAuditConfig struct {
|
|
|
|
|
AccessKeyId string `json:"access_key_id" yaml:"access_key_id"`
|
|
|
|
|
AccessKeySecret string `json:"access_key_secret" yaml:"access_key_secret"`
|
|
|
|
|
Scenes string `json:"scenes" yaml:"scenes"`
|
|
|
|
|
TaskBufferSize int `json:"task_buffer_size" yaml:"task_buffer_size"`
|
|
|
|
|
TaskPacketSize int `json:"task_packet_size" yaml:"task_packet_size"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 文字内容审核服务配置
|
|
|
|
|
type TextAuditConfig struct {
|
|
|
|
|
Labels string `json:"labels" yaml:"labels"`
|
|
|
|
|
TaskBufferSize int `json:"task_buffer_size" yaml:"task_buffer_size"`
|
|
|
|
|
TaskPacketSize int `json:"task_packet_size" yaml:"task_packet_size"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 服务器信息配置
|
|
|
|
|
type ServerInfoConfig struct {
|
|
|
|
|
FileServerDomainName string `json:"file_server_domain_name" yaml:"file_server_domain_name"`
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-29 09:55:56 +08:00
|
|
|
|
// 钉钉机器人信息配置
|
|
|
|
|
type DingTalkRobotConfig struct {
|
|
|
|
|
AccessToken string `json:"access_token" yaml:"access_token"`
|
|
|
|
|
Secret string `json:"secret" yaml:"secret"`
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-18 18:19:31 +08:00
|
|
|
|
// xxl-job服务配置
|
|
|
|
|
type XxlJobConfig struct {
|
|
|
|
|
ServerAddr string `json:"server_addr" yaml:"server_addr"`
|
|
|
|
|
AccessToken string `json:"access_token" yaml:"access_token"`
|
|
|
|
|
ExecutorIp string `json:"executor_ip" yaml:"executor_ip"`
|
|
|
|
|
ExecutorPort string `json:"executor_port" yaml:"executor_port"`
|
|
|
|
|
RegistryKey string `json:"registry_key" yaml:"registry_key"`
|
2024-02-01 09:02:11 +08:00
|
|
|
|
LogPath string `json:"log_path" yaml:"log_path"`
|
2024-01-18 18:19:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-21 22:17:40 +08:00
|
|
|
|
func LoadConfig(configFilePath string, cfg interface{}) error {
|
|
|
|
|
cfgStr, err := ioutil.ReadFile(configFilePath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
msg := fmt.Sprintf("LoadConfig fail, path: %v, err: %v", configFilePath, err)
|
|
|
|
|
err = errors.New(msg)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
err = yaml.Unmarshal(cfgStr, cfg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
msg := fmt.Sprintf("yaml Unmarshal fail, path: %v, err: %v", configFilePath, err)
|
|
|
|
|
err = errors.New(msg)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|