package subconfigs import ( "fmt" "git.x2erp.com/qdy/go-base/config/core" ) // RabbitMQConfig RabbitMQ配置 type RabbitMQConfig struct { core.BaseConfig Host string `yaml:"host" desc:"RabbitMQ服务器主机地址"` Port int `yaml:"port" desc:"RabbitMQ服务器端口"` Username string `yaml:"username" desc:"RabbitMQ用户名"` Password string `yaml:"password" desc:"RabbitMQ密码"` Vhost string `yaml:"vhost" desc:"RabbitMQ虚拟主机"` UseTLS bool `yaml:"use_tls" desc:"是否使用TLS加密连接"` CACert string `yaml:"ca_cert" desc:"CA证书文件路径"` CertFile string `yaml:"cert_file" desc:"客户端证书文件路径"` KeyFile string `yaml:"key_file" desc:"客户端私钥文件路径"` MaxOpenChannels int `yaml:"max_open_channels" desc:"最大打开的通道数"` ReconnectDelay int `yaml:"reconnect_delay" desc:"重连延迟时间(毫秒)"` MaxReconnectAttempts int `yaml:"max_reconnect_attempts" desc:"最大重连尝试次数"` Heartbeat int `yaml:"heartbeat" desc:"心跳间隔时间(秒)"` ChannelSize int `yaml:"channel_size" desc:"通道缓冲区大小"` DefaultExchange string `yaml:"default_exchange" desc:"默认交换机名称"` DefaultQueue string `yaml:"default_queue" desc:"默认队列名称"` AutoAck bool `yaml:"auto_ack" desc:"是否自动确认消息"` Mandatory bool `yaml:"mandatory" desc:"是否强制路由"` Immediate bool `yaml:"immediate" desc:"是否立即交付"` PrefetchCount int `yaml:"prefetch_count" desc:"预取消息数量"` PrefetchSize int `yaml:"prefetch_size" desc:"预取消息大小"` Global bool `yaml:"global" desc:"是否为全局预取设置"` PublisherConfirms bool `yaml:"publisher_confirms" desc:"是否启用发布者确认"` ConfirmTimeout int `yaml:"confirm_timeout" desc:"确认超时时间(秒)"` } func (c *RabbitMQConfig) Description() string { return "RabbitMQ消息队列配置" } func NewRabbitMQConfig() *RabbitMQConfig { return &RabbitMQConfig{} } func (c *RabbitMQConfig) SetDefaults() { c.Port = 5672 c.Username = "guest" c.Password = "guest" c.Vhost = "/" c.MaxOpenChannels = 10 c.ReconnectDelay = 5000 c.MaxReconnectAttempts = 10 c.Heartbeat = 30 c.ChannelSize = 100 c.DefaultExchange = "amq.direct" c.PrefetchCount = 1 c.ConfirmTimeout = 30 } func (c *RabbitMQConfig) Load(data map[string]interface{}) error { return c.LoadFromYAML(data, c) } func (c *RabbitMQConfig) Validate() error { if c.Host == "" { return fmt.Errorf("rabbitmq host is required") } if c.Port <= 0 { return fmt.Errorf("invalid rabbitmq port: %d", c.Port) } return nil } func (c *RabbitMQConfig) IsConfigured() bool { return c.Host != "" } // 自动注册 func init() { core.Register("rabbitmq", &RabbitMQConfig{}) }