shanshanzhong c582087c0f
Some checks failed
Build docker and publish / build (20.15.1) (push) Failing after 6m27s
refactor: 更新项目引用路径从perfect-panel/ppanel-server到perfect-panel/server
feat: 添加版本和构建时间变量
fix: 修正短信队列类型注释错误
style: 清理未使用的代码和测试文件
docs: 更新安装文档中的下载链接
chore: 迁移数据库脚本添加日志和订阅配置
2025-10-13 01:33:03 -07:00

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,
},
)
}