setting.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package asynqsvc
  2. import (
  3. "crypto/tls"
  4. "kpt-pasture/config"
  5. "time"
  6. "gitee.com/xuyiping_admin/pkg/cputil"
  7. "github.com/hibiken/asynq"
  8. )
  9. type AsynqSetting struct {
  10. Redis AsynqRedisSetting `json:"redis" yaml:"redis"`
  11. Queues map[string]int `json:"queues,omitempty" yaml:"queues"`
  12. Concurrency int `json:"concurrency,omitempty" yaml:"concurrency"`
  13. LogLevel int32 `json:"log_level,omitempty" yaml:"log_level"`
  14. }
  15. func NewAsynqSetting(setting *config.AsynqSetting) *AsynqSetting {
  16. var curr AsynqSetting
  17. if err := cputil.DeepCopy(&curr, setting); err != nil {
  18. panic(err)
  19. }
  20. return &curr
  21. }
  22. type AsynqRedisSetting struct {
  23. // Network type to use, either tcp or unix.
  24. // Default is tcp.
  25. Network string `json:"network,omitempty" yaml:"network" env:"ASYNQ_REDIS_NETWORK"`
  26. // Redis server address in "host:port" format.
  27. Addr string `json:"addr,omitempty" yaml:"addr" env:"ASYNQ_REDIS_ADDR"`
  28. // Username to authenticate the current connection when Redis ACLs are used.
  29. // See: https://redis.io/commands/auth.
  30. Username string `json:"username,omitempty" yaml:"username" env:"ASYNQ_REDIS_USERNAME"`
  31. // Password to authenticate the current connection.
  32. // See: https://redis.io/commands/auth.
  33. Password string `json:"password,omitempty" yaml:"password" env:"ASYNQ_REDIS_PASSWORD"`
  34. // Redis DB to select after connecting to a server.
  35. // See: https://redis.io/commands/select.
  36. DB int `json:"db,omitempty" yaml:"db" env:"ASYNQ_REDIS_DB"`
  37. // Dial timeout for establishing new connections.
  38. // Default is 5 seconds.
  39. DialTimeout time.Duration `json:"dialTimeout,omitempty" yaml:"dial_timeout" env:"ASYNQ_REDIS_DIAL_TIMEOUT"`
  40. // Timeout for socket reads.
  41. // If timeout is reached, read commands will fail with a timeout error
  42. // instead of blocking.
  43. //
  44. // Use value -1 for no timeout and 0 for default.
  45. // Default is 3 seconds.
  46. ReadTimeout time.Duration `json:"readTimeout,omitempty" yaml:"read_timeout" env:"ASYNQ_REDIS_READ_TIMEOUT"`
  47. // Timeout for socket writes.
  48. // If timeout is reached, write commands will fail with a timeout error
  49. // instead of blocking.
  50. //
  51. // Use value -1 for no timeout and 0 for default.
  52. // Default is ReadTimout.
  53. WriteTimeout time.Duration `json:"writeTimeout,omitempty" yaml:"write_timeout" env:"ASYNQ_REDIS_WRITE_TIMEOUT"`
  54. // Maximum number of socket connections.
  55. // Default is 10 connections per every CPU as reported by runtime.NumCPU.
  56. PoolSize int `json:"poolSize,omitempty" yaml:"pool_size" env:"ASYNQ_REDIS_POOL_SIZE"`
  57. // TLS Config used to connect to a server.
  58. // TLS will be negotiated only if this field is set.
  59. TLSConfig *tls.Config `json:"tlsConfig,omitempty" yaml:"tls_config"`
  60. }
  61. func (a *AsynqSetting) Config() asynq.Config {
  62. return asynq.Config{
  63. Concurrency: a.Concurrency,
  64. Queues: a.Queues,
  65. ErrorHandler: asynq.ErrorHandlerFunc(asynqError),
  66. LogLevel: asynq.LogLevel(a.LogLevel),
  67. }
  68. }
  69. func (setting AsynqRedisSetting) RedisClientOpt() asynq.RedisClientOpt {
  70. return asynq.RedisClientOpt{
  71. Network: setting.Network,
  72. Addr: setting.Addr,
  73. Username: setting.Username,
  74. Password: setting.Password,
  75. DB: setting.DB,
  76. DialTimeout: setting.DialTimeout,
  77. ReadTimeout: setting.ReadTimeout,
  78. WriteTimeout: setting.WriteTimeout,
  79. PoolSize: setting.PoolSize,
  80. TLSConfig: setting.TLSConfig,
  81. }
  82. }