app

package
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package app 提供框架的全局状态管理,包括数据库连接、缓存客户端、配置和日志等核心组件。

所有导出变量在框架启动阶段由 core 包自动初始化,业务层可直接引用。 对于多实例场景(DBList、RedisList),应使用 GetDbByName / GetRedisByName 等线程安全的访问方法。

Index

Constants

This section is empty.

Variables

View Source
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

func GetDbByName(dbname string) (*gorm.DB, error)

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 IsAllHealthy

func IsAllHealthy() bool

IsAllHealthy 检查所有服务是否健康

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 实例的连接池统计信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL