/// <summary> /// Создаёт воркеров согласно настройкам. /// </summary> protected IReadOnlyList <TWorker> CreateWorkers(RequestProcessorNodeOptions workerOptions) { if (workerOptions == null) { throw new ArgumentNullException(nameof(workerOptions)); } // сделаем локальный логер, чтобы логировать процесс создания групп var logger = LoggerFactory.CreateLogger(GetType().Name); logger.LogDebug("Создаём воркеров..."); var workers = new List <TWorker>(workerOptions.WorkersCount); for (var i = 0; i < workerOptions.WorkersCount; i++) { // сделаем каждому воркеру свой логгер, чтобы логи каждого воркера были в отдельном файле var workerName = $"worker_{i}"; var workerLogger = LoggerFactory.CreateLogger(workerName); // сформируем параметры для воркера var createWorkerParams = CreateWorkerParams(workerLogger); // и создадим воркер logger.LogDebug($"Создаём worker с именем \"{workerName}\"..."); workers.Add(CreateWorker(createWorkerParams)); } logger.LogInformation("Создание воркеров завершено"); return(workers); }
protected RequestProcessorBootstrapperBase( RequestProcessorNodeOptions nodeOptions, ILoggerFactory loggerFactory, IServiceProvider serviceProvider) { NodeOptions = nodeOptions ?? throw new ArgumentNullException(nameof(nodeOptions)); NodeOptions.AssertValid(); LoggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); ServiceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); Logger = loggerFactory.CreateLogger(GetType().Name) ?? throw new ArgumentNullException(nameof(loggerFactory)); EventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset); EventReceivers = new ConcurrentDictionary <IEventSource, IEventReceiver>(); }
protected RequestDispatcherBase( RequestProcessorNodeOptions nodeOptions, EventWaitHandle manualResetEvent, IReadOnlyList <TWorker> workers, ILogger logger) { if (nodeOptions == null) { throw new ArgumentNullException(nameof(nodeOptions)); } NodeName = nodeOptions.Name; NewEventWaitHandle = manualResetEvent ?? throw new ArgumentNullException(nameof(manualResetEvent)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); Workers = workers ?? throw new ArgumentNullException(nameof(workers)); if (workers.Count == 0) { throw new ArgumentException("Нужно указать хотя бы одного воркера для обработки", nameof(workers)); } _stateFlushPeriod = TimeSpan.FromSeconds(nodeOptions.StateFlushPeriodSec); }