/// <summary> /// Базовый класс для реактора, работающего на основе шаблона "Наблюдатель" /// </summary> /// <exception cref="ArgumentOutOfRangeException"></exception> protected QueueSubscribedReactorBase( IMessageAdapterWithSubscribing messageAdapter, int reconnectTimeout, string pollingId, bool?serviceHealthDependent, IHealthCheckingService healthCheckingService, IMessagingCallContextAccessor messagingCallContextAccessor) { adapter = messageAdapter.ThrowIfNull(nameof(messageAdapter)); _messagingCallContextAccessor = messagingCallContextAccessor.ThrowIfNull(nameof(messagingCallContextAccessor)); _healthCheckingService = healthCheckingService.ThrowIfNull(nameof(serviceHealthDependent)); if (reconnectTimeout <= 0) { throw new ArgumentOutOfRangeException(nameof(reconnectTimeout)); } _hasDiagnosticErrors = false; _serviceHealthDependent = serviceHealthDependent ?? false; _reconnectPolling = new Polling(reconnectTimeout, pollingId); }
private bool OutputResult(HttpListenerContext ctx, IPolling polling) { if (!polling.Running) { polling.Start(); // Wait to connect System.Threading.Thread.Sleep(200); } if (polling.Running && polling.Data != null) { polling.Queried(); ctx.Response.StatusCode = (int)System.Net.HttpStatusCode.OK; return(ctx.JsonResponse(polling.Data)); } else { ctx.Response.StatusCode = (int)System.Net.HttpStatusCode.NoContent; return(true); } }
/// <summary> /// Инициализирует компонент ссылками на <see cref="IMessageAdapter"/>, <see cref="IHealthCheckingService"/>, /// коллекции <see cref="IMessageProcessor"/>, <see cref="IMessageProcessorAsync"/> /// </summary> /// <param name="messageAdapter">Адаптер для работы с очередью</param> /// <param name="messageProcessors">Процессоры для обработки сообщения</param> /// <param name="asyncMessageProcessors">Асинхронные процессоры для обработки сообщения</param> /// <param name="subscribeInterval">Интервал подписки</param> /// <param name="pollingId">Идентификатор потока для опроса</param> /// <param name="serviceHealthDependent">Признак использования диагностики</param> /// <param name="healthCheckingService">Ссылка на службу диагностики</param> /// <param name="messagingCallContextAccessor">Контейнер с параметрами вызова для сообщения</param> /// <exception cref="ArgumentOutOfRangeException"></exception> protected QueuePollingReactorBase(IMessageAdapter messageAdapter, IEnumerable <IMessageProcessor> messageProcessors, IEnumerable <IMessageProcessorAsync> asyncMessageProcessors, int subscribeInterval, string pollingId, bool?serviceHealthDependent, IHealthCheckingService healthCheckingService, IMessagingCallContextAccessor messagingCallContextAccessor) { _adapter = messageAdapter.ThrowIfNull(nameof(messageAdapter)); _messageProcessors = messageProcessors.ThrowIfNull(nameof(messageProcessors)); _asyncMessageProcessors = asyncMessageProcessors.ThrowIfNull(nameof(asyncMessageProcessors)); if (subscribeInterval <= 0) { throw new ArgumentOutOfRangeException(nameof(subscribeInterval)); } _healthCheckingService = healthCheckingService.ThrowIfNull(nameof(serviceHealthDependent)); _hasDiagnosticErrors = false; _serviceHealthDependent = serviceHealthDependent ?? false; _messagingCallContextAccessor = messagingCallContextAccessor; _subscribePolling = new Polling(subscribeInterval, pollingId); }