private IMessageConsumer <MessageEx> CreateAndStartMainMessageConsumer(MsmqRouterFactory factory) { IMessageConsumer <MessageEx> consumer; IMessageSource <MessageEx> messageSource = factory.CreateSource(InputQueue, false); switch (RoutableTransportMode) { case RoutableTransportMode.OnSite: consumer = factory.CreateConsumer(messageSource); break; case RoutableTransportMode.OnDemand: consumer = factory.CreateRouter(messageSource, factory, GetQueueNameToRouteMessageIn); break; default: throw new ApplicationException(string.Format("{0} plugin hosting mode is not supported", RoutableTransportMode.ToString())); } consumer.IsTransactional = IsTransactional; consumer.IsolationLevel = IsolationLevel; consumer.TransactionTimeout = TransactionTimeout; consumer.Consume(Handle); return(consumer); }
private IMessageConsumer <MessageEx> CreateAndStartUiMessageConsumer(MsmqRouterFactory factory) { IMessageSource <MessageEx> messageSource = factory.CreateSource(UiCommandInputQueue, false); IMessageConsumer <MessageEx> consumer = factory.CreateConsumer(messageSource); switch (RoutableTransportMode) { case RoutableTransportMode.OnSite: consumer.Consume(Handle); break; case RoutableTransportMode.OnDemand: consumer.Consume(HandleAsync); break; } return(consumer); }
/// <summary> /// Starts the transport. /// </summary> public void Start() { if (RoutableTransportMode == RoutableTransportMode.OnDemand) { int workersThreads; int ioThreads; ThreadPool.GetMaxThreads(out workersThreads, out ioThreads); ThreadPool.SetMaxThreads(100 * Environment.ProcessorCount, ioThreads); ThreadPool.SetMinThreads(50, 50); } CheckConfiguration(); CreateQueuesIfNecessary(); if (ErrorQueue != null) { _errorQueue = new MessageQueue(MsmqUtilities.GetFullPath(ErrorQueue)); } if (!string.IsNullOrEmpty(InputQueue)) { IPluginQueue inputQueue = PluginQueueFactory.Create(InputQueue); IPluginQueue commandQueue = PluginQueueFactory.Create(UiCommandInputQueue); if (PurgeOnStartup) { inputQueue.Purge(); commandQueue.Purge(); } Logger.Info(LoggerContext.New(inputQueue.Name), "starting..."); Logger.Info(LoggerContext.New(commandQueue.Name), "starting..."); var factory = new MsmqRouterFactory(Logger, TimeSpan.FromSeconds(SecondsToWaitForMessage), GetTransactionTypeForSend, GetTransactionTypeForReceive()); _inputQueueRouter = CreateAndStartMainMessageConsumer(factory); _uiQueueRouter = CreateAndStartUiMessageConsumer(factory); Logger.Info(LoggerContext.New(inputQueue.Name), "started."); Logger.Info(LoggerContext.New(commandQueue.Name), "started."); _queue = inputQueue; } }
private IMessageConsumer<MessageEx> CreateAndStartUiMessageConsumer(MsmqRouterFactory factory) { IMessageSource<MessageEx> messageSource = factory.CreateSource(UiCommandInputQueue, false); IMessageConsumer<MessageEx> consumer = factory.CreateConsumer(messageSource); switch (RoutableTransportMode) { case RoutableTransportMode.OnSite: consumer.Consume(Handle); break; case RoutableTransportMode.OnDemand: consumer.Consume(HandleAsync); break; } return consumer; }
private IMessageConsumer<MessageEx> CreateAndStartMainMessageConsumer(MsmqRouterFactory factory) { IMessageConsumer<MessageEx> consumer; IMessageSource<MessageEx> messageSource = factory.CreateSource(InputQueue, false); switch (RoutableTransportMode) { case RoutableTransportMode.OnSite: consumer = factory.CreateConsumer(messageSource); break; case RoutableTransportMode.OnDemand: consumer = factory.CreateRouter(messageSource, factory, GetQueueNameToRouteMessageIn); break; default: throw new ApplicationException(string.Format("{0} plugin hosting mode is not supported", RoutableTransportMode.ToString())); } consumer.IsTransactional = IsTransactional; consumer.IsolationLevel = IsolationLevel; consumer.TransactionTimeout = TransactionTimeout; consumer.Consume(Handle); return consumer; }
private IMessageConsumer<MessageEx> CreateAndStartMessageConsumer(IPluginQueue queue, Func<MessageEx, string> routeBy) { var factory = new MsmqRouterFactory(Logger, TimeSpan.FromSeconds(SecondsToWaitForMessage), GetTransactionTypeForSend, GetTransactionTypeForReceive()); IMessageConsumer<MessageEx> consumer; IMessageSource<MessageEx> messageSource = factory.CreateSource(queue.Name); switch (RoutableTransportMode) { case RoutableTransportMode.OnSite: consumer = factory.CreateConsumer(messageSource); break; case RoutableTransportMode.OnDemand: consumer = factory.CreateRouter(messageSource, factory, routeBy); break; default: throw new ApplicationException(string.Format("{0} plugin hosting mode is not supported", RoutableTransportMode.ToString())); } consumer.IsTransactional = IsTransactional; consumer.IsolationLevel = IsolationLevel; consumer.TransactionTimeout = TransactionTimeout; consumer.Consume(Handle); return consumer; }