暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rabbitmq_config.go 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package subconfigs
  2. import (
  3. "fmt"
  4. "git.x2erp.com/qdy/go-base/config/core"
  5. )
  6. // RabbitMQConfig RabbitMQ配置
  7. type RabbitMQConfig struct {
  8. core.BaseConfig
  9. Host string `yaml:"host" desc:"RabbitMQ服务器主机地址"`
  10. Port int `yaml:"port" desc:"RabbitMQ服务器端口"`
  11. Username string `yaml:"username" desc:"RabbitMQ用户名"`
  12. Password string `yaml:"password" desc:"RabbitMQ密码"`
  13. Vhost string `yaml:"vhost" desc:"RabbitMQ虚拟主机"`
  14. UseTLS bool `yaml:"use_tls" desc:"是否使用TLS加密连接"`
  15. CACert string `yaml:"ca_cert" desc:"CA证书文件路径"`
  16. CertFile string `yaml:"cert_file" desc:"客户端证书文件路径"`
  17. KeyFile string `yaml:"key_file" desc:"客户端私钥文件路径"`
  18. MaxOpenChannels int `yaml:"max_open_channels" desc:"最大打开的通道数"`
  19. ReconnectDelay int `yaml:"reconnect_delay" desc:"重连延迟时间(毫秒)"`
  20. MaxReconnectAttempts int `yaml:"max_reconnect_attempts" desc:"最大重连尝试次数"`
  21. Heartbeat int `yaml:"heartbeat" desc:"心跳间隔时间(秒)"`
  22. ChannelSize int `yaml:"channel_size" desc:"通道缓冲区大小"`
  23. DefaultExchange string `yaml:"default_exchange" desc:"默认交换机名称"`
  24. DefaultQueue string `yaml:"default_queue" desc:"默认队列名称"`
  25. AutoAck bool `yaml:"auto_ack" desc:"是否自动确认消息"`
  26. Mandatory bool `yaml:"mandatory" desc:"是否强制路由"`
  27. Immediate bool `yaml:"immediate" desc:"是否立即交付"`
  28. PrefetchCount int `yaml:"prefetch_count" desc:"预取消息数量"`
  29. PrefetchSize int `yaml:"prefetch_size" desc:"预取消息大小"`
  30. Global bool `yaml:"global" desc:"是否为全局预取设置"`
  31. PublisherConfirms bool `yaml:"publisher_confirms" desc:"是否启用发布者确认"`
  32. ConfirmTimeout int `yaml:"confirm_timeout" desc:"确认超时时间(秒)"`
  33. }
  34. func (c *RabbitMQConfig) Description() string {
  35. return "RabbitMQ消息队列配置"
  36. }
  37. func NewRabbitMQConfig() *RabbitMQConfig {
  38. return &RabbitMQConfig{}
  39. }
  40. func (c *RabbitMQConfig) SetDefaults() {
  41. c.Port = 5672
  42. c.Username = "guest"
  43. c.Password = "guest"
  44. c.Vhost = "/"
  45. c.MaxOpenChannels = 10
  46. c.ReconnectDelay = 5000
  47. c.MaxReconnectAttempts = 10
  48. c.Heartbeat = 30
  49. c.ChannelSize = 100
  50. c.DefaultExchange = "amq.direct"
  51. c.PrefetchCount = 1
  52. c.ConfirmTimeout = 30
  53. }
  54. func (c *RabbitMQConfig) Load(data map[string]interface{}) error {
  55. return c.LoadFromYAML(data, c)
  56. }
  57. func (c *RabbitMQConfig) Validate() error {
  58. if c.Host == "" {
  59. return fmt.Errorf("rabbitmq host is required")
  60. }
  61. if c.Port <= 0 {
  62. return fmt.Errorf("invalid rabbitmq port: %d", c.Port)
  63. }
  64. return nil
  65. }
  66. func (c *RabbitMQConfig) IsConfigured() bool {
  67. return c.Host != ""
  68. }
  69. // 自动注册
  70. func init() {
  71. core.Register("rabbitmq", &RabbitMQConfig{})
  72. }