public static ReceiveComponent Initialize(ReceiveConfiguration receiveConfiguration, TransportComponent transportComponent, PipelineComponent pipeline, EventAggregator eventAggregator, CriticalError criticalError, string errorQueue, HostingComponent hostingComponent) { Func <IPushMessages> messagePumpFactory = null; //we don't need the message pump factory for send-only endpoints if (receiveConfiguration != null) { messagePumpFactory = transportComponent.GetMessagePumpFactory(); } var receiveComponent = new ReceiveComponent(receiveConfiguration, messagePumpFactory, pipeline, eventAggregator, criticalError, errorQueue); receiveComponent.BindQueues(transportComponent.QueueBindings); if (receiveConfiguration != null) { hostingComponent.AddStartupDiagnosticsSection("Receiving", new { receiveConfiguration.LocalAddress, receiveConfiguration.InstanceSpecificQueue, receiveConfiguration.LogicalAddress, receiveConfiguration.PurgeOnStartup, receiveConfiguration.QueueNameBase, TransactionMode = receiveConfiguration.TransactionMode.ToString("G"), receiveConfiguration.PushRuntimeSettings.MaxConcurrency, Satellites = receiveConfiguration.SatelliteDefinitions.Select(s => new { s.Name, s.ReceiveAddress, TransactionMode = s.RequiredTransportTransactionMode.ToString("G"), s.RuntimeSettings.MaxConcurrency }).ToArray() }); } return(receiveComponent); }
ReceiveComponent CreateReceiveComponent(ReceiveConfiguration receiveConfiguration, TransportInfrastructure transportInfrastructure, QueueBindings queueBindings, IPipelineCache pipelineCache, EventAggregator eventAggregator, IMessageMapper messageMapper) { var errorQueue = settings.ErrorQueueAddress(); var receiveComponent = new ReceiveComponent(receiveConfiguration, receiveConfiguration != null ? transportInfrastructure.ConfigureReceiveInfrastructure() : null, //don't create the receive infrastructure for send-only endpoints pipelineCache, pipelineConfiguration, eventAggregator, builder, criticalError, errorQueue, messageMapper); receiveComponent.BindQueues(queueBindings); if (receiveConfiguration != null) { settings.AddStartupDiagnosticsSection("Receiving", new { receiveConfiguration.LocalAddress, receiveConfiguration.InstanceSpecificQueue, receiveConfiguration.LogicalAddress, receiveConfiguration.PurgeOnStartup, receiveConfiguration.QueueNameBase, TransactionMode = receiveConfiguration.TransactionMode.ToString("G"), receiveConfiguration.PushRuntimeSettings.MaxConcurrency, Satellites = receiveConfiguration.SatelliteDefinitions.Select(s => new { s.Name, s.ReceiveAddress, TransactionMode = s.RequiredTransportTransactionMode.ToString("G"), s.RuntimeSettings.MaxConcurrency }).ToArray() }); } return(receiveComponent); }
public static ReceiveComponent Initialize( Configuration configuration, string errorQueue, HostingComponent.Configuration hostingConfiguration, PipelineSettings pipelineSettings) { TransportReceiveInfrastructure transportReceiveInfrastructure = null; if (!configuration.IsSendOnlyEndpoint) { transportReceiveInfrastructure = configuration.transportSeam.TransportInfrastructure.ConfigureReceiveInfrastructure(); if (configuration.CreateQueues) { hostingConfiguration.AddInstaller(identity => { var queueCreator = transportReceiveInfrastructure.QueueCreatorFactory(); return(queueCreator.CreateQueueIfNecessary(configuration.transportSeam.QueueBindings, identity)); }); } } var receiveComponent = new ReceiveComponent( configuration, hostingConfiguration.CriticalError, errorQueue, transportReceiveInfrastructure); if (configuration.IsSendOnlyEndpoint) { return(receiveComponent); } receiveComponent.BindQueues(configuration.transportSeam.QueueBindings); pipelineSettings.Register("TransportReceiveToPhysicalMessageProcessingConnector", b => { var storage = hostingConfiguration.Container.HasComponent <IOutboxStorage>() ? b.Build <IOutboxStorage>() : new NoOpOutboxStorage(); return(new TransportReceiveToPhysicalMessageConnector(storage)); }, "Allows to abort processing the message"); pipelineSettings.Register("LoadHandlersConnector", b => { var adapter = hostingConfiguration.Container.HasComponent <ISynchronizedStorageAdapter>() ? b.Build <ISynchronizedStorageAdapter>() : new NoOpSynchronizedStorageAdapter(); var syncStorage = hostingConfiguration.Container.HasComponent <ISynchronizedStorage>() ? b.Build <ISynchronizedStorage>() : new NoOpSynchronizedStorage(); return(new LoadHandlersConnector(b.Build <MessageHandlerRegistry>(), syncStorage, adapter)); }, "Gets all the handlers to invoke from the MessageHandler registry based on the message type."); pipelineSettings.Register("ExecuteUnitOfWork", new UnitOfWorkBehavior(), "Executes the UoW"); pipelineSettings.Register("InvokeHandlers", new InvokeHandlerTerminator(), "Calls the IHandleMessages<T>.Handle(T)"); var externalHandlerRegistryUsed = hostingConfiguration.Container.HasComponent <MessageHandlerRegistry>(); var handlerDiagnostics = new Dictionary <string, List <string> >(); if (!externalHandlerRegistryUsed) { var messageHandlerRegistry = configuration.messageHandlerRegistry; RegisterMessageHandlers(messageHandlerRegistry, configuration.ExecuteTheseHandlersFirst, hostingConfiguration.Container, hostingConfiguration.AvailableTypes); foreach (var messageType in messageHandlerRegistry.GetMessageTypes()) { handlerDiagnostics[messageType.FullName] = messageHandlerRegistry.GetHandlersFor(messageType) .Select(handler => handler.HandlerType.FullName) .ToList(); } } hostingConfiguration.AddStartupDiagnosticsSection("Receiving", new { configuration.LocalAddress, configuration.InstanceSpecificQueue, configuration.LogicalAddress, configuration.PurgeOnStartup, configuration.QueueNameBase, TransactionMode = configuration.TransactionMode.ToString("G"), configuration.PushRuntimeSettings.MaxConcurrency, Satellites = configuration.SatelliteDefinitions.Select(s => new { s.Name, s.ReceiveAddress, TransactionMode = s.RequiredTransportTransactionMode.ToString("G"), s.RuntimeSettings.MaxConcurrency }).ToArray(), ExternalHandlerRegistry = externalHandlerRegistryUsed, MessageHandlers = handlerDiagnostics }); return(receiveComponent); }
public static ReceiveComponent Initialize(Configuration configuration, ReceiveConfiguration transportReceiveConfiguration, TransportComponent.Configuration transportConfiguration, PipelineComponent pipelineComponent, string errorQueue, HostingComponent.Configuration hostingConfiguration, PipelineSettings pipelineSettings) { var receiveComponent = new ReceiveComponent(transportReceiveConfiguration, pipelineComponent, hostingConfiguration.CriticalError, errorQueue); receiveComponent.BindQueues(transportConfiguration.QueueBindings); pipelineSettings.Register("TransportReceiveToPhysicalMessageProcessingConnector", b => { var storage = hostingConfiguration.Container.HasComponent <IOutboxStorage>() ? b.Build <IOutboxStorage>() : new NoOpOutboxStorage(); return(new TransportReceiveToPhysicalMessageConnector(storage)); }, "Allows to abort processing the message"); pipelineSettings.Register("LoadHandlersConnector", b => { var adapter = hostingConfiguration.Container.HasComponent <ISynchronizedStorageAdapter>() ? b.Build <ISynchronizedStorageAdapter>() : new NoOpSynchronizedStorageAdapter(); var syncStorage = hostingConfiguration.Container.HasComponent <ISynchronizedStorage>() ? b.Build <ISynchronizedStorage>() : new NoOpSynchronizedStorage(); return(new LoadHandlersConnector(b.Build <MessageHandlerRegistry>(), syncStorage, adapter)); }, "Gets all the handlers to invoke from the MessageHandler registry based on the message type."); pipelineSettings.Register("ExecuteUnitOfWork", new UnitOfWorkBehavior(), "Executes the UoW"); pipelineSettings.Register("InvokeHandlers", new InvokeHandlerTerminator(), "Calls the IHandleMessages<T>.Handle(T)"); if (!hostingConfiguration.Container.HasComponent <MessageHandlerRegistry>()) { var orderedHandlers = configuration.ExecuteTheseHandlersFirst; LoadMessageHandlers(configuration, orderedHandlers, hostingConfiguration.Container, hostingConfiguration.AvailableTypes); } if (transportReceiveConfiguration != null) { hostingConfiguration.AddStartupDiagnosticsSection("Receiving", new { transportReceiveConfiguration.LocalAddress, transportReceiveConfiguration.InstanceSpecificQueue, transportReceiveConfiguration.LogicalAddress, transportReceiveConfiguration.PurgeOnStartup, transportReceiveConfiguration.QueueNameBase, TransactionMode = transportReceiveConfiguration.TransactionMode.ToString("G"), transportReceiveConfiguration.PushRuntimeSettings.MaxConcurrency, Satellites = transportReceiveConfiguration.SatelliteDefinitions.Select(s => new { s.Name, s.ReceiveAddress, TransactionMode = s.RequiredTransportTransactionMode.ToString("G"), s.RuntimeSettings.MaxConcurrency }).ToArray() }); } return(receiveComponent); }