示例#1
0
        /// <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);
        }
示例#2
0
 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);
     }
 }
示例#3
0
        /// <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);
        }