public static CreateLocalAddress ( string queueName, string>.IReadOnlyDictionary |
||
queueName | string | The name of the main input queue. |
properties | string>.IReadOnlyDictionary | The additional transport-specific properties. |
return |
internal Receiving() { EnableByDefault(); Prerequisite(c => !c.Settings.GetOrDefault <bool>("Endpoint.SendOnly"), "Endpoint is configured as send-only"); Defaults(s => { var transportInfrastructure = s.Get <TransportInfrastructure>(); var discriminator = s.GetOrDefault <string>("EndpointInstanceDiscriminator"); var baseQueueName = s.GetOrDefault <string>("BaseInputQueueName") ?? s.EndpointName(); var mainInstance = transportInfrastructure.BindToLocalEndpoint(new EndpointInstance(s.EndpointName())); var mainLogicalAddress = LogicalAddress.CreateLocalAddress(baseQueueName, mainInstance.Properties); s.SetDefault <LogicalAddress>(mainLogicalAddress); var mainAddress = transportInfrastructure.ToTransportAddress(mainLogicalAddress); s.SetDefault("NServiceBus.SharedQueue", mainAddress); if (discriminator != null) { var instanceSpecificAddress = transportInfrastructure.ToTransportAddress(mainLogicalAddress.CreateIndividualizedAddress(discriminator)); s.SetDefault("NServiceBus.EndpointSpecificQueue", instanceSpecificAddress); } }); }
public static Configuration PrepareConfiguration(Settings settings, TransportSeam transportSeam) { var isSendOnlyEndpoint = settings.IsSendOnlyEndpoint; if (isSendOnlyEndpoint && settings.CustomLocalAddressProvided) { throw new Exception($"Specifying a base name for the input queue using `{nameof(ReceiveSettingsExtensions.OverrideLocalAddress)}(baseInputQueueName)` is not supported for send-only endpoints."); } var endpointName = settings.EndpointName; var discriminator = settings.EndpointInstanceDiscriminator; var queueNameBase = settings.CustomLocalAddress ?? endpointName; var purgeOnStartup = settings.PurgeOnStartup; var transportInfrastructure = transportSeam.TransportInfrastructure; //note: This is an old hack, we are passing the endpoint name to bind but we only care about the properties var mainInstanceProperties = transportInfrastructure.BindToLocalEndpoint(new EndpointInstance(endpointName)).Properties; var logicalAddress = LogicalAddress.CreateLocalAddress(queueNameBase, mainInstanceProperties); var localAddress = transportInfrastructure.ToTransportAddress(logicalAddress); string instanceSpecificQueue = null; if (discriminator != null) { instanceSpecificQueue = transportInfrastructure.ToTransportAddress(logicalAddress.CreateIndividualizedAddress(discriminator)); } var transactionMode = GetRequiredTransactionMode(settings, transportInfrastructure); var pushRuntimeSettings = settings.PushRuntimeSettings; var receiveConfiguration = new Configuration( logicalAddress, queueNameBase, localAddress, instanceSpecificQueue, transactionMode, pushRuntimeSettings, purgeOnStartup, settings.PipelineCompletedSubscribers ?? new Notification <ReceivePipelineCompleted>(), isSendOnlyEndpoint, settings.ExecuteTheseHandlersFirst, settings.MessageHandlerRegistry, settings.ShouldCreateQueues, transportSeam); settings.RegisterReceiveConfigurationForBackwardsCompatibility(receiveConfiguration); return(receiveConfiguration); }
public static ReceiveConfiguration Build(ReadOnlySettings settings, TransportComponent.Configuration transportConfiguration) { var isSendOnlyEndpoint = settings.Get <bool>("Endpoint.SendOnly"); if (isSendOnlyEndpoint) { if (settings.HasExplicitValue(ReceiveSettingsExtensions.CustomLocalAddressKey)) { throw new Exception($"Specifying a base name for the input queue using `{nameof(ReceiveSettingsExtensions.OverrideLocalAddress)}(baseInputQueueName)` is not supported for send-only endpoints."); } return(null); } var endpointName = settings.EndpointName(); var discriminator = settings.GetOrDefault <string>("EndpointInstanceDiscriminator"); var queueNameBase = settings.GetOrDefault <string>(ReceiveSettingsExtensions.CustomLocalAddressKey) ?? endpointName; var purgeOnStartup = settings.GetOrDefault <bool>("Transport.PurgeOnStartup"); //note: This is an old hack, we are passing the endpoint name to bind but we only care about the properties var mainInstanceProperties = transportConfiguration.BindToLocalEndpoint(new EndpointInstance(endpointName)).Properties; var logicalAddress = LogicalAddress.CreateLocalAddress(queueNameBase, mainInstanceProperties); var localAddress = transportConfiguration.ToTransportAddress(logicalAddress); string instanceSpecificQueue = null; if (discriminator != null) { instanceSpecificQueue = transportConfiguration.ToTransportAddress(logicalAddress.CreateIndividualizedAddress(discriminator)); } var transactionMode = GetRequiredTransactionMode(settings); var pushRuntimeSettings = GetDequeueLimitations(settings); return(new ReceiveConfiguration( logicalAddress, queueNameBase, localAddress, instanceSpecificQueue, transactionMode, pushRuntimeSettings, purgeOnStartup, settings.GetOrDefault <Notification <ReceivePipelineCompleted> >() ?? new Notification <ReceivePipelineCompleted>())); }