コード例 #1
0
        private async void ManageWorkerPool(object sender, ElapsedEventArgs e)
        {
            var queueMessageCount = await _serviceBusManager.GetMessageCount();

            var activeWorkerCount = CurrentWorkerCount();
            var totalWorkerCount  = TotalWorkerCount();

            _log.Info($"Checking service bus and workers. Amount of message in queues: {queueMessageCount}. Amount of workers (active/total): {activeWorkerCount}/{totalWorkerCount}.");

            switch (await WorkerQueueEvaluator.AdviseAction(activeWorkerCount, totalWorkerCount, queueMessageCount, _targetProcessingSla, _minimumWorkerCount, _httpClient))
            {
            case WorkerAction.Add:
                _log.Info("Starting new worker.");
                await StartNewWorker();

                break;

            case WorkerAction.Remove:
                _log.Info("Shutting worker down.");
                await ShutWorkerDown();

                break;

            default:
                _log.Info("No worker action taken.");
                break;
            }

            await _workerPoolMonitor.UpdateAllWorkers();
        }