public ScheduleTaskService(ILogger <ScheduleTaskService> logger, AixScheduleTaskOptions options, IScheduleTaskLifetime scheduleTaskLifetime, IAixScheduleTaskRepository aixScheduleTaskRepository, IAixDistributionLockRepository aixDistributionLockRepository, IScheduleTaskDistributedLock scheduleTaskDistributedLock, IAixScheduleTaskLogRepository aixScheduleTaskLogRepository, MyMultithreadTaskExecutor taskExecutor, ScheduleTaskExecutor scheduleTaskExecutor, ExpireLogExecutor expireLogExecutor, ErrorTaskExecutor errorTaskExecutor ) { _logger = logger; _options = options; _scheduleTaskLifetime = scheduleTaskLifetime; PreReadSecond = _options.PreReadSecond; _aixScheduleTaskRepository = aixScheduleTaskRepository; _aixDistributionLockRepository = aixDistributionLockRepository; _scheduleTaskDistributedLock = scheduleTaskDistributedLock; _aixScheduleTaskLogRepository = aixScheduleTaskLogRepository; _taskExecutor = taskExecutor; _scheduleTaskExecutor = scheduleTaskExecutor; _expireLogExecutor = expireLogExecutor; _errorTaskExecutor = errorTaskExecutor; }
public ScheduleTaskExecutor(ILogger <ScheduleTaskExecutor> logger, MyMultithreadTaskExecutor taskExecutor, IAixScheduleTaskLogRepository aixScheduleTaskLogRepository, AixScheduleTaskOptions aixScheduleTaskOptions ) { _logger = logger; _taskExecutor = taskExecutor; _aixScheduleTaskLogRepository = aixScheduleTaskLogRepository; _options = aixScheduleTaskOptions; }
public WorkerProcess(IServiceProvider serviceProvider, string topic, string groupName, string consumerName) { _serviceProvider = serviceProvider; _logger = _serviceProvider.GetService <ILogger <WorkerProcess> >(); _options = _serviceProvider.GetService <RedisMessageBusOptions>(); _redis = _serviceProvider.GetService <ConnectionMultiplexer>(); _database = _redis.GetDatabase(); _taskExecutor = _serviceProvider.GetService <MyMultithreadTaskExecutor>(); _topic = topic; _groupName = groupName; _consumerName = consumerName; _redisStorage = _serviceProvider.GetService <RedisStorage>(); BatchCount = _options.PerBatchPullCount > 0 ? _options.PerBatchPullCount : 100; }
private static void AddAddMultithreadExecutor(this IServiceCollection services, int consumerThreadCount) { AssertUtils.IsTrue(consumerThreadCount > 0, "RedisMessageBus消费者线程数必须大于0"); services.AddSingleton(serviceProvider => { var logger = serviceProvider.GetService <ILogger <MyMultithreadTaskExecutor> >(); var taskExecutor = new MyMultithreadTaskExecutor(options => { options.ThreadCount = consumerThreadCount;// Environment.ProcessorCount * 2; }); taskExecutor.OnException += ex => { logger.LogError(ex, "RedisMessageBus本地多线程任务执行器执行出错"); return(Task.CompletedTask); }; taskExecutor.Start(); logger.LogInformation($"RedisMessageBus本地多线程任务执行器开始 ThreadCount={taskExecutor.ThreadCount}......"); return(taskExecutor); }); }
private static void AddAddMultithreadExecutor(this IServiceCollection services, int consumerThreadCount) { if (consumerThreadCount <= 0) { throw new ArgumentException("Aix.ScheduleTask消费者线程数必须大于0"); } services.AddSingleton(serviceProvider => { var logger = serviceProvider.GetService <ILogger <MyMultithreadTaskExecutor> >(); var taskExecutor = new MyMultithreadTaskExecutor(options => { options.ThreadCount = consumerThreadCount;// Environment.ProcessorCount * 2; }); taskExecutor.OnException += ex => { logger.LogError(ex, "Aix.ScheduleTask本地多线程任务执行器执行出错"); return(Task.CompletedTask); }; taskExecutor.Start(); logger.LogInformation($"Aix.ScheduleTask本地多线程任务执行器开始 ThreadCount={taskExecutor.ThreadCount}......"); return(taskExecutor); }); }