public void Initialize(ReceiveComponent.Configuration receiveConfiguration, HostingComponent.Configuration hostingConfiguration, TransportSeam transportSeam) { if (receiveConfiguration.IsSendOnlyEndpoint) { //Message recoverability is only relevant for endpoints receiving messages. return; } hostInformation = hostingConfiguration.HostInformation; this.transportSeam = transportSeam; transactionsOn = transportSeam.TransportDefinition.TransportTransactionMode != TransportTransactionMode.None; var errorQueue = settings.ErrorQueueAddress(); transportSeam.QueueBindings.BindSending(errorQueue); var immediateRetryConfig = GetImmediateRetryConfig(); var delayedRetryConfig = GetDelayedRetryConfig(); var failedConfig = new FailedConfig(errorQueue, settings.UnrecoverableExceptions()); recoverabilityConfig = new RecoverabilityConfig(immediateRetryConfig, delayedRetryConfig, failedConfig); hostingConfiguration.AddStartupDiagnosticsSection("Recoverability", new { ImmediateRetries = recoverabilityConfig.Immediate.MaxNumberOfRetries, DelayedRetries = recoverabilityConfig.Delayed.MaxNumberOfRetries, DelayedRetriesTimeIncrease = recoverabilityConfig.Delayed.TimeIncrease.ToString("g"), recoverabilityConfig.Failed.ErrorQueue, UnrecoverableExceptions = recoverabilityConfig.Failed.UnrecoverableExceptionTypes.Select(t => t.FullName).ToArray() }); }
public static RoutingComponent Initialize( Configuration configuration, TransportSeam transportSeam, ReceiveComponent.Configuration receiveConfiguration, Conventions conventions, PipelineSettings pipelineSettings) { var distributionPolicy = configuration.DistributionPolicy; var unicastRoutingTable = configuration.UnicastRoutingTable; var endpointInstances = configuration.EndpointInstances; foreach (var distributionStrategy in configuration.CustomDistributionStrategies) { distributionPolicy.SetDistributionStrategy(distributionStrategy); } configuration.ConfiguredUnicastRoutes?.Apply(unicastRoutingTable, conventions); var isSendOnlyEndpoint = receiveConfiguration.IsSendOnlyEndpoint; if (!isSendOnlyEndpoint) { pipelineSettings.Register( new ApplyReplyToAddressBehavior( receiveConfiguration.LocalAddress, receiveConfiguration.InstanceSpecificQueue, configuration.PublicReturnAddress), "Applies the public reply to address to outgoing messages"); } var sendRouter = new UnicastSendRouter( isSendOnlyEndpoint, receiveConfiguration?.QueueNameBase, receiveConfiguration?.InstanceSpecificQueue, distributionPolicy, unicastRoutingTable, endpointInstances, i => transportSeam.TransportDefinition.ToTransportAddress(new QueueAddress(i.Endpoint, i.Discriminator, i.Properties, null))); if (configuration.EnforceBestPractices) { EnableBestPracticeEnforcement(pipelineSettings, new Validations(conventions)); } return(new RoutingComponent( sendRouter, configuration.EnforceBestPractices)); }