Documentation
¶
Overview ¶
Package app 提供框架的全局状态管理,包括数据库连接、缓存客户端、配置和日志等核心组件。
所有导出变量在框架启动阶段由 core 包自动初始化,业务层可直接引用。 对于多实例场景(DBList、RedisList),应使用 GetDbByName / GetRedisByName 等线程安全的访问方法。
Index ¶
- Variables
- func CheckPoolHealth() map[string]HealthStatus
- func CloseAllDB() error
- func GetDbByName(dbname string) (*gorm.DB, error)
- func GetRedisByName(name string) (redis.UniversalClient, error)
- func IsAllHealthy() bool
- func SendRabbitMqMsg(queueName string, exchangeName string, exchangeType string, routingKey string, ...) error
- func SendRabbitMqMsgBatch(queueName string, exchangeName string, exchangeType string, routingKey string, ...) error
- func SendRabbitMqMsgBatchWithContext(ctx context.Context, queueName string, exchangeName string, ...) error
- func SendRabbitMqMsgWithConfirm(queueName string, exchangeName string, exchangeType string, routingKey string, ...) error
- type DBInstanceStats
- type HealthStatus
- type PoolStats
- type RedisInstanceStats
Constants ¶
This section is empty.
Variables ¶
var ( // Env 当前运行环境标识(如 dev、test、prod),由配置文件或环境变量决定 Env string // DB 主数据库连接实例(单库模式) DB *gorm.DB // DBResolver 数据库读写分离解析器实例,通过 gorm 的 DBResolver 插件实现读写分离 DBResolver *gorm.DB // ES Elasticsearch 类型化客户端实例 ES *elasticsearch.TypedClient // Etcd Etcd 客户端实例,用于服务发现或分布式配置 Etcd *clientv3.Client // DBList 多数据库连接池,按别名索引。并发访问需通过 GetDbByName 方法 DBList map[string]*gorm.DB // Redis 主 Redis 客户端实例(支持单机/哨兵/集群模式) Redis redis.UniversalClient // RedisList 多 Redis 连接池,按别名索引。并发访问需通过 GetRedisByName 方法 RedisList map[string]redis.UniversalClient // BaseConfig 框架基础配置(解析后的结构体),包含 System、MySQL、Redis 等子配置 BaseConfig config.BaseConfig // RabbitMQProducerList 使用 sync.Map 存储 RabbitMQ 生产者 // key: queueInfo (string), value: *config.MessageQueue // 使用 sync.Map 替代 map + mutex,提供更好的并发读写性能 RabbitMQProducerList sync.Map // Config 用户自定义配置指针,默认指向 BaseConfig,可在启动前替换为包含业务字段的扩展配置结构体 Config any = new(config.BaseConfig) // Logger 全局日志实例(logrus),在框架启动时初始化 Logger *logrus.Logger )
Functions ¶
func CheckPoolHealth ¶
func CheckPoolHealth() map[string]HealthStatus
CheckPoolHealth 检查连接池健康状态
检查范围: 1. 主数据库(mysql) 2. 数据库解析器(mysql_resolver,读写分离) 3. 多数据库列表(mysql:<aliasName>) 4. 主 Redis(redis) 5. 多 Redis 列表(redis:<aliasName>) 6. Elasticsearch 7. Etcd
func CloseAllDB ¶
func CloseAllDB() error
CloseAllDB 关闭所有数据库连接,包括主库、读写分离解析器和多数据库列表
关闭流程: 1. 关闭主数据库连接(DB) 2. 关闭数据库读写分离解析器连接(DBResolver) 3. 关闭多数据库列表中的所有连接(DBList)
func GetDbByName ¶
GetDbByName 通过名称获取db,如果不存在则返回错误 参数:
- dbname: 数据库别名
返回:
- *gorm.DB: 数据库实例
- error: 如果数据库不存在或未初始化则返回错误
func GetRedisByName ¶
func GetRedisByName(name string) (redis.UniversalClient, error)
GetRedisByName 通过名称获取Redis客户端,如果不存在则返回错误 参数:
- name: Redis别名
返回:
- redis.UniversalClient: Redis客户端实例
- error: 如果Redis不存在或未初始化则返回错误
func SendRabbitMqMsg ¶
func SendRabbitMqMsg(queueName string, exchangeName string, exchangeType string, routingKey string, message string, mqConfigNames ...string) error
SendRabbitMqMsg 发送RabbitMQ消息 该函数支持向多个消息队列实例发送消息,并提供重试机制 参数:
- queueName: 队列名称
- exchangeName: 交换机名称
- exchangeType: 交换机类型(direct, fanout, topic, headers)
- routingKey: 路由键
- message: 消息内容
- mqConfigNames: 消息队列配置名称列表(可选,为空时使用默认配置)
返回:
- error: 如果所有消息队列都发送失败则返回错误,部分成功时返回最后一个错误
func SendRabbitMqMsgBatch ¶
func SendRabbitMqMsgBatch(queueName string, exchangeName string, exchangeType string, routingKey string, messages []string, mqConfigNames ...string) error
SendRabbitMqMsgBatch 批量发送RabbitMQ消息 该函数支持向消息队列批量发送消息,提高发送效率 参数:
- queueName: 队列名称
- exchangeName: 交换机名称
- exchangeType: 交换机类型(direct, fanout, topic, headers)
- routingKey: 路由键
- messages: 消息内容列表
- mqConfigNames: 消息队列配置名称列表(可选,为空时使用默认配置)
返回:
- error: 如果所有消息队列都发送失败则返回错误
func SendRabbitMqMsgBatchWithContext ¶
func SendRabbitMqMsgBatchWithContext(ctx context.Context, queueName string, exchangeName string, exchangeType string, routingKey string, messages []string, mqConfigNames ...string) error
SendRabbitMqMsgBatchWithContext 批量发送RabbitMQ消息(带 context) 参数:
- ctx: context
- queueName: 队列名称
- exchangeName: 交换机名称
- exchangeType: 交换机类型(direct, fanout, topic, headers)
- routingKey: 路由键
- messages: 消息内容列表
- mqConfigNames: 消息队列配置名称列表(可选,为空时使用默认配置)
返回:
- error: 如果所有消息队列都发送失败则返回错误
func SendRabbitMqMsgWithConfirm ¶
func SendRabbitMqMsgWithConfirm(queueName string, exchangeName string, exchangeType string, routingKey string, message string, confirmTimeout time.Duration, mqConfigNames ...string) error
SendRabbitMqMsgWithConfirm 发送RabbitMQ消息(启用 Publisher Confirms) 该函数支持消息确认机制,确保消息成功投递到 RabbitMQ 参数:
- queueName: 队列名称
- exchangeName: 交换机名称
- exchangeType: 交换机类型(direct, fanout, topic, headers)
- routingKey: 路由键
- message: 消息内容
- confirmTimeout: 确认超时时间
- mqConfigNames: 消息队列配置名称列表(可选,为空时使用默认配置)
返回:
- error: 如果所有消息队列都发送失败则返回错误
Types ¶
type DBInstanceStats ¶
type DBInstanceStats struct {
MaxOpenConns int `json:"max_open_conns"` // 最大打开连接数
OpenConns int `json:"open_conns"` // 当前打开连接数
InUse int `json:"in_use"` // 使用中的连接数
Idle int `json:"idle"` // 空闲连接数
WaitCount int64 `json:"wait_count"` // 等待连接的总次数
WaitDurationMs int64 `json:"wait_duration_ms"` // 等待连接的总时间(毫秒)
MaxIdleClosed int64 `json:"max_idle_closed"` // 因超过空闲连接数被关闭的连接数
MaxLifetimeClosed int64 `json:"max_lifetime_closed"` // 因超过生命周期被关闭的连接数
}
DBInstanceStats 单个数据库实例的连接池统计信息
type HealthStatus ¶
type HealthStatus struct {
Healthy bool `json:"healthy"`
Error string `json:"error,omitempty"`
Stats map[string]int `json:"stats,omitempty"`
}
HealthStatus 健康状态
type PoolStats ¶
type PoolStats struct {
// 主数据库连接池
DBMaxOpenConns int `json:"db_max_open_conns"`
DBOpenConns int `json:"db_open_conns"`
DBInUse int `json:"db_in_use"`
DBIdle int `json:"db_idle"`
DBWaitCount int64 `json:"db_wait_count"`
DBWaitDurationMs int64 `json:"db_wait_duration_ms"`
DBMaxIdleClosed int64 `json:"db_max_idle_closed"`
DBMaxLifetimeClosed int64 `json:"db_max_lifetime_closed"`
// 主 Redis 连接池
RedisPoolSize int `json:"redis_pool_size"`
RedisActiveConns int `json:"redis_active_conns"`
RedisIdleConns int `json:"redis_idle_conns"`
// 多数据库连接池统计(按别名索引)
DBListStats map[string]*DBInstanceStats `json:"db_list_stats,omitempty"`
// 数据库解析器连接池统计(读写分离)
DBResolverStats *DBInstanceStats `json:"db_resolver_stats,omitempty"`
// 多 Redis 连接池统计(按别名索引)
RedisListStats map[string]*RedisInstanceStats `json:"redis_list_stats,omitempty"`
}
PoolStats 连接池统计信息
func GetPoolStats ¶
func GetPoolStats() *PoolStats
GetPoolStats 获取所有连接池统计信息
采集范围: 1. 主数据库(app.DB) 2. 数据库解析器(app.DBResolver,读写分离) 3. 多数据库列表(app.DBList) 4. 多 Redis 列表(app.RedisList) 5. 主 Redis(app.Redis)
type RedisInstanceStats ¶
type RedisInstanceStats struct {
PoolSize int `json:"pool_size"` // 连接池大小
ActiveConns int `json:"active_conns"` // 活跃连接数
IdleConns int `json:"idle_conns"` // 空闲连接数
}
RedisInstanceStats 单个 Redis 实例的连接池统计信息