public static ReceiveConfiguration Build(ReadOnlySettings settings, TransportComponent transportComponent) { 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 = transportComponent.BindToLocalEndpoint(new EndpointInstance(endpointName)).Properties; var logicalAddress = LogicalAddress.CreateLocalAddress(queueNameBase, mainInstanceProperties); var localAddress = transportComponent.ToTransportAddress(logicalAddress); string instanceSpecificQueue = null; if (discriminator != null) { instanceSpecificQueue = transportComponent.ToTransportAddress(logicalAddress.CreateIndividualizedAddress(discriminator)); } var transactionMode = GetRequiredTransactionMode(settings); var pushRuntimeSettings = GetDequeueLimitations(settings); return(new ReceiveConfiguration(logicalAddress, queueNameBase, localAddress, instanceSpecificQueue, transactionMode, pushRuntimeSettings, purgeOnStartup)); }
public void Initialize(TransportComponent transportComponent, PipelineSettings pipelineSettings, ReceiveConfiguration receiveConfiguration) { var conventions = settings.Get <Conventions>(); var configuredUnicastRoutes = settings.GetOrDefault <ConfiguredUnicastRoutes>(); if (settings.TryGet(out List <DistributionStrategy> distributionStrategies)) { foreach (var distributionStrategy in distributionStrategies) { DistributionPolicy.SetDistributionStrategy(distributionStrategy); } } configuredUnicastRoutes?.Apply(UnicastRoutingTable, conventions); pipelineSettings.Register("UnicastSendRouterConnector", b => { var router = new UnicastSendRouter(receiveConfiguration == null, receiveConfiguration?.QueueNameBase, receiveConfiguration?.InstanceSpecificQueue, DistributionPolicy, UnicastRoutingTable, EndpointInstances, i => transportComponent.ToTransportAddress(LogicalAddress.CreateRemoteAddress(i))); return(new SendConnector(router)); }, "Determines how the message being sent should be routed"); pipelineSettings.Register("UnicastReplyRouterConnector", new ReplyConnector(), "Determines how replies should be routed"); EnforceBestPractices = ShouldEnforceBestPractices(settings); if (EnforceBestPractices) { EnableBestPracticeEnforcement(conventions, pipelineSettings); } }