public IEnumerable<IMessagePump> CreateAll() { _logger.Debug("Creating multicast event message pumps"); var eventTypes = _multicastEventHandlerTypes.Value .SelectMany(ht => ht.GetGenericInterfacesClosing(typeof (IHandleMulticastEvent<>))) .Select(gi => gi.GetGenericArguments().Single()) .OrderBy(t => t.FullName) .Distinct() .ToArray(); foreach (var eventType in eventTypes) { _logger.Debug("Creating message pump for multicast event type {0}", eventType.Name); var topicPath = PathFactory.TopicPathFor(eventType); var subscriptionName = String.Format("{0}.{1}", _applicationName, _instanceName); var receiver = new NimbusSubscriptionMessageReceiver(_queueManager, topicPath, subscriptionName, _concurrentHandlerLimit); _garbageMan.Add(receiver); var dispatcher = new MulticastEventMessageDispatcher(_multicastEventHandlerFactory, eventType, _clock); _garbageMan.Add(dispatcher); var pump = new MessagePump(receiver, dispatcher, _logger, _clock); _garbageMan.Add(pump); yield return pump; } }
public IEnumerable<IMessagePump> CreateAll() { _logger.Debug("Creating multicast request message pumps"); var requestTypes = _requestHandlerTypes.Value.SelectMany(ht => ht.GetGenericInterfacesClosing(typeof (IHandleRequest<,>))) .Select(gi => gi.GetGenericArguments().First()) .OrderBy(t => t.FullName) .Distinct() .ToArray(); foreach (var requestType in requestTypes) { _logger.Debug("Creating message pump for multicase request type {0}", requestType.Name); var topicPath = PathFactory.TopicPathFor(requestType); var applicationSharedSubscriptionName = String.Format("{0}", _applicationName); var messageReceiver = new NimbusSubscriptionMessageReceiver(_queueManager, topicPath, applicationSharedSubscriptionName, _concurrentHandlerLimit); _garbageMan.Add(messageReceiver); var dispatcher = new MulticastRequestMessageDispatcher(_messagingFactory, _multicastRequestHandlerFactory, requestType, _clock); _garbageMan.Add(dispatcher); var pump = new MessagePump(messageReceiver, dispatcher, _logger, _clock); _garbageMan.Add(pump); yield return pump; } }
private INimbusMessageReceiver CreateTopicReceiver(string topicPath, string subscriptionName) { var receiver = new NimbusSubscriptionMessageReceiver(_queueManager, topicPath, subscriptionName, _concurrentHandlerLimit, _logger); _garbageMan.Add(receiver); return receiver; }