service/library/configcenter/configcenter.go

152 lines
6.4 KiB
Go
Raw Normal View History

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 {
MchId string `json:"mchid" yaml:"mchid"` // 商户id
SerialNo string `json:"serial_no" yaml:"serial_no"` // 商户API证书的证书序列号
ApiV3Key string `json:"apiv3_key" yaml:"apiv3_key"` // APIv3Key商户平台获取
PrivateKey string `json:"private_key" yaml:"private_key"` // 商户API证书下载后私钥 apiclient_key.pem 读取后的字符串内容
}
// 账号相关验密配置
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 {
Appid string `json:"appid" yaml:"appid"` // 商户id
PrivateKey string `json:"private_key" yaml:"private_key"` // 私钥
NotifyUrl string `json:"notify_url" yaml:"notify_url"` // 回调地址
}
// 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"`
}
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
}