Some checks failed
Build docker and publish / build (20.15.1) (push) Failing after 6m27s
feat: 添加版本和构建时间变量 fix: 修正短信队列类型注释错误 style: 清理未使用的代码和测试文件 docs: 更新安装文档中的下载链接 chore: 迁移数据库脚本添加日志和订阅配置
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package queue
|
|
|
|
import (
|
|
"github.com/hibiken/asynq"
|
|
"github.com/perfect-panel/server/internal/svc"
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
"github.com/perfect-panel/server/queue/handler"
|
|
)
|
|
|
|
type Service struct {
|
|
svc *svc.ServiceContext
|
|
server *asynq.Server
|
|
}
|
|
|
|
func NewService(svc *svc.ServiceContext) *Service {
|
|
return &Service{
|
|
svc: svc,
|
|
server: initService(svc),
|
|
}
|
|
}
|
|
|
|
func (m *Service) Start() {
|
|
logger.Infof("start consumer service")
|
|
mux := asynq.NewServeMux()
|
|
// register tasks
|
|
handler.RegisterHandlers(mux, m.svc)
|
|
if err := m.server.Run(mux); err != nil {
|
|
logger.Error("consumer service error", logger.LogField{
|
|
Key: "error",
|
|
Value: err.Error(),
|
|
})
|
|
}
|
|
}
|
|
|
|
func (m *Service) Stop() {
|
|
logger.Info("stop consumer service")
|
|
m.server.Stop()
|
|
}
|
|
|
|
func initService(svc *svc.ServiceContext) *asynq.Server {
|
|
return asynq.NewServer(
|
|
asynq.RedisClientOpt{Addr: svc.Config.Redis.Host, Password: svc.Config.Redis.Pass, DB: 5},
|
|
asynq.Config{
|
|
IsFailure: func(err error) bool {
|
|
logger.Error("consumer service error", logger.Field("error", err.Error()))
|
|
return true
|
|
},
|
|
Concurrency: 20,
|
|
},
|
|
)
|
|
}
|