41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
// 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
|
|
} |