modelRT/task/initializer.go

41 lines
1.2 KiB
Go
Raw Normal View History

// Package task provides asynchronous task processing with worker pools
package task
import (
"context"
"fmt"
"modelRT/config"
"modelRT/logger"
"gorm.io/gorm"
)
// InitTaskWorker initializes a task worker with the given configuration and database connection
func InitTaskWorker(ctx context.Context, config config.ModelRTConfig, db *gorm.DB) (*TaskWorker, error) {
// Create worker configuration
workerCfg := WorkerConfig{
PoolSize: config.AsyncTaskConfig.WorkerPoolSize,
PreAlloc: true,
MaxBlockingTasks: 100,
QueueConsumerCount: config.AsyncTaskConfig.QueueConsumerCount,
PollingInterval: config.AsyncTaskConfig.HealthCheckInterval,
}
// Create task handler factory
handlerFactory := NewHandlerFactory()
handlerFactory.CreateDefaultHandlers()
handler := DefaultCompositeHandler()
// Create task worker
worker, err := NewTaskWorker(ctx, workerCfg, db, config.RabbitMQConfig, handler)
if err != nil {
return nil, fmt.Errorf("failed to create task worker: %w", err)
}
logger.Info(ctx, "Task worker initialized",
"worker_pool_size", workerCfg.PoolSize,
"queue_consumers", workerCfg.QueueConsumerCount,
)
return worker, nil
}