2025-09-27 10:17:16 +08:00

52 lines
1.1 KiB
Go

package queue
import (
"github.com/hibiken/asynq"
"github.com/perfect-panel/ppanel-server/internal/svc"
"github.com/perfect-panel/ppanel-server/pkg/logger"
"github.com/perfect-panel/ppanel-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,
},
)
}