private void ConfigurePublishingInfrastructure(Configure config, AzureServiceBusQueueConfig configSection)
 {
     config.Configurer.ConfigureComponent<AzureServiceBusTopicPublisher>(DependencyLifecycle.InstancePerCall);
     config.Configurer.ConfigureProperty<AzureServiceBusTopicPublisher>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
     
     config.Configurer.ConfigureComponent<AzureServiceBusTopicSubscriptionManager>(DependencyLifecycle.InstancePerCall);
 }
        void ConfigureCreationInfrastructure(FeatureConfigurationContext context, AzureServiceBusQueueConfig configSection)
        {
            context.Container.ConfigureComponent<ManageMessagingFactoriesLifeCycle>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent<CreatesMessagingFactories>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent<CreatesNamespaceManagers>(DependencyLifecycle.SingleInstance);

            context.Container.ConfigureComponent<ManageQueueClientsLifeCycle>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent<AzureServicebusQueueClientCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureProperty<AzureServicebusQueueClientCreator>(t => t.BatchSize, configSection.BatchSize);

            context.Container.ConfigureComponent<AzureServiceBusTopologyCreator>(DependencyLifecycle.InstancePerCall);

            context.Container.ConfigureComponent<AzureServiceBusQueueCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.LockDuration, TimeSpan.FromMilliseconds(configSection.LockDuration));
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.MaxSizeInMegabytes, configSection.MaxSizeInMegabytes);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.RequiresDuplicateDetection, configSection.RequiresDuplicateDetection);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.RequiresSession, configSection.RequiresSession);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.DefaultMessageTimeToLive, TimeSpan.FromMilliseconds(configSection.DefaultMessageTimeToLive));
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.EnableDeadLetteringOnMessageExpiration, configSection.EnableDeadLetteringOnMessageExpiration);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.DuplicateDetectionHistoryTimeWindow, TimeSpan.FromMilliseconds(configSection.DuplicateDetectionHistoryTimeWindow));
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.EnableBatchedOperations, configSection.EnableBatchedOperations);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.EnablePartitioning, configSection.EnablePartitioning);
            context.Container.ConfigureProperty<AzureServiceBusQueueCreator>(t => t.SupportOrdering, configSection.SupportOrdering);

            context.Container.ConfigureComponent<ManageTopicClientsLifeCycle>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent<AzureServicebusTopicClientCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureComponent<AzureServiceBusTopicCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.LockDuration, TimeSpan.FromMilliseconds(configSection.LockDuration));
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.MaxSizeInMegabytes, configSection.MaxSizeInMegabytes);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.RequiresDuplicateDetection, configSection.RequiresDuplicateDetection);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.RequiresSession, configSection.RequiresSession);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.DefaultMessageTimeToLive, TimeSpan.FromMilliseconds(configSection.DefaultMessageTimeToLive));
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.EnableDeadLetteringOnMessageExpiration, configSection.EnableDeadLetteringOnMessageExpiration);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.DuplicateDetectionHistoryTimeWindow, TimeSpan.FromMilliseconds(configSection.DuplicateDetectionHistoryTimeWindow));
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.EnableBatchedOperations, configSection.EnableBatchedOperations);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.EnablePartitioning, configSection.EnablePartitioning);
            context.Container.ConfigureProperty<AzureServiceBusTopicCreator>(t => t.SupportOrdering, configSection.SupportOrdering);

            context.Container.ConfigureComponent<AzureServicebusSubscriptionClientCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureProperty<AzureServicebusSubscriptionClientCreator>(t => t.BatchSize, configSection.BatchSize);

            context.Container.ConfigureComponent<AzureServiceBusSubscriptionCreator>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.LockDuration, TimeSpan.FromMilliseconds(configSection.LockDuration));
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.RequiresSession, configSection.RequiresSession);
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.DefaultMessageTimeToLive, TimeSpan.FromMilliseconds(configSection.DefaultMessageTimeToLive));
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.EnableDeadLetteringOnMessageExpiration, configSection.EnableDeadLetteringOnMessageExpiration);
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.EnableDeadLetteringOnFilterEvaluationExceptions, configSection.EnableDeadLetteringOnFilterEvaluationExceptions);
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
            context.Container.ConfigureProperty<AzureServiceBusSubscriptionCreator>(t => t.EnableBatchedOperations, configSection.EnableBatchedOperations);
        }
        private void ConfigureReceiveInfrastructure(Configure config, AzureServiceBusQueueConfig configSection)
        {
            config.Configurer.ConfigureComponent<AzureServiceBusDequeueStrategy>(DependencyLifecycle.InstancePerCall);

            config.Configurer.ConfigureComponent<AzureServiceBusQueueNotifier>(DependencyLifecycle.InstancePerCall);
            config.Configurer.ConfigureProperty<AzureServiceBusQueueNotifier>(t => t.ServerWaitTime, configSection.ServerWaitTime);
            config.Configurer.ConfigureProperty<AzureServiceBusQueueNotifier>(t => t.BatchSize, configSection.BatchSize);
            config.Configurer.ConfigureProperty<AzureServiceBusQueueNotifier>(t => t.BackoffTimeInSeconds, configSection.BackoffTimeInSeconds);

            config.Configurer.ConfigureComponent<AzureServiceBusSubscriptionNotifier>(DependencyLifecycle.InstancePerCall);
            config.Configurer.ConfigureProperty<AzureServiceBusSubscriptionNotifier>(t => t.ServerWaitTime, configSection.ServerWaitTime);
            config.Configurer.ConfigureProperty<AzureServiceBusSubscriptionNotifier>(t => t.BatchSize, configSection.BatchSize);
            config.Configurer.ConfigureProperty<AzureServiceBusSubscriptionNotifier>(t => t.BackoffTimeInSeconds, configSection.BackoffTimeInSeconds);
        }
        protected override string GetLocalAddress(ReadOnlySettings settings)
        {
            var configSection = settings.GetConfigSection<AzureServiceBusQueueConfig>();
            if (configSection == null)
            {
                //hack: just to get the defaults, we should refactor this to support specifying the values on the NServiceBus/Transport connection string as well
                configSection = new AzureServiceBusQueueConfig();
            }

            ServiceBusEnvironment.SystemConnectivity.Mode = (ConnectivityMode)Enum.Parse(typeof(ConnectivityMode), configSection.ConnectivityMode);

            var queueName = settings.HasSetting("NServiceBus.LocalAddress") ? settings.Get<string>("NServiceBus.LocalAddress") : settings.EndpointName();
            return NamingConventions.QueueNamingConvention(settings, null, queueName, false);
            
        }
        public void Configure(FeatureConfigurationContext context, AzureServiceBusQueueConfig configSection)
        {
            ConfigureCreationInfrastructure(context, configSection);

            ConfigureReceiveInfrastructure(context, configSection);

            if (!context.Container.HasComponent<ISendMessages>())
            {
                ConfigureSendInfrastructure(context, configSection);
            }

            if (!context.Container.HasComponent<IPublishMessages>() &&
                !context.Container.HasComponent<IManageSubscriptions>())
            {
                ConfigurePublishingInfrastructure(context, configSection);
            }
        }
        public void Configure(AzureServiceBusQueueConfig configSection, TransportConfig transportConfig)
        {
            var config = NServiceBus.Configure.Instance;

            ConfigureCreationInfrastructure(config, configSection, transportConfig);

            ConfigureReceiveInfrastructure(config, configSection);

            if (!config.Configurer.HasComponent<ISendMessages>())
            {
                ConfigureSendInfrastructure(config, configSection);
            }

            if (!config.Configurer.HasComponent<IPublishMessages>() &&
                !config.Configurer.HasComponent<IManageSubscriptions>())
            {
                ConfigurePublishingInfrastructure(config, configSection);
            }
        }
        static bool ShouldIndividualize(AzureServiceBusQueueConfig configSection, ReadOnlySettings settings)
        {
            // if this setting is set, then the core is responsible for individualization
            if (settings != null && settings.HasExplicitValue("IndividualizeEndpointAddress"))
            {
                return false;
            }

            // if explicitly set in code
            if (settings != null && settings.HasExplicitValue("ScaleOut.UseSingleBrokerQueue"))
                return !settings.Get<bool>("ScaleOut.UseSingleBrokerQueue");

            // if explicitly set in config
            if (configSection != null)
                return configSection.QueuePerInstance;

            // if default is set
            if (settings != null && !settings.GetOrDefault<bool>("ScaleOut.UseSingleBrokerQueue"))
                return !settings.GetOrDefault<bool>("ScaleOut.UseSingleBrokerQueue");

            return false;
        }
Example #8
0
            public T GetConfiguration <T>() where T : class, new()
            {
                if (typeof(T) == typeof(UnicastBusConfig))
                {
                    Debug.WriteLine("Getting UnicastBusConfig");
                    var config = new UnicastBusConfig();
                    config.MessageEndpointMappings.Add(new MessageEndpointMapping
                    {
                        AssemblyName = "NSBUnityError.Commands",
                        Namespace    = "NSBUnityError.Commands",
                        Endpoint     = "NSBUnityError.Host"
                    });
                    return(config as T);
                }

                if (typeof(T) == typeof(TransportConfig))
                {
                    Debug.WriteLine("Getting TransportConfig");
                    var config = new TransportConfig
                    {
                        MaximumConcurrencyLevel = 1,
                        MaxRetries = 3
                    };
                    return(config as T);
                }

                if (typeof(T) == typeof(MessageForwardingInCaseOfFaultConfig))
                {
                    Debug.WriteLine("Getting MessageForwardingInCaseOfFaultConfig");
                    var config = new MessageForwardingInCaseOfFaultConfig
                    {
                        ErrorQueue = "error"
                    };
                    return(config as T);
                }

                if (typeof(T) == typeof(SecondLevelRetriesConfig))
                {
                    Debug.WriteLine("Getting SecondLevelRetriesConfig");
                    var config = new SecondLevelRetriesConfig
                    {
                        Enabled         = true,
                        NumberOfRetries = 3,
                        TimeIncrease    = TimeSpan.FromSeconds(10)
                    };
                    return(config as T);
                }

                if (typeof(T) == typeof(AuditConfig))
                {
                    Debug.WriteLine("Getting AuditConfig");
                    var config = new AuditConfig
                    {
                        QueueName = "audit"
                    };
                    return(config as T);
                }

                if (typeof(T) == typeof(AzureServiceBusQueueConfig))
                {
                    Debug.WriteLine("Getting AzureServiceBusQueueConfig");
                    var config = new AzureServiceBusQueueConfig
                    {
                        ConnectionString = _serviceBusConnectionString
                    };
                    return(config as T);
                }

                return(null);
            }
 private void ConfigureSendInfrastructure(Configure config, AzureServiceBusQueueConfig configSection)
 {
     config.Configurer.ConfigureComponent<AzureServiceBusMessageQueueSender>(DependencyLifecycle.InstancePerCall);
     config.Configurer.ConfigureProperty<AzureServiceBusMessageQueueSender>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
 }
 void ConfigureSendInfrastructure(FeatureConfigurationContext context, AzureServiceBusQueueConfig configSection)
 {
     context.Container.ConfigureComponent<AzureServiceBusSender>(DependencyLifecycle.InstancePerCall);
     context.Container.ConfigureComponent<AzureServiceBusQueueSender>(DependencyLifecycle.InstancePerCall);
     context.Container.ConfigureProperty<AzureServiceBusQueueSender>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
 }
        public override void Initialize()
        {
            var configSection = NServiceBus.Configure.GetConfigSection <AzureServiceBusQueueConfig>();

            ServiceBusEnvironment.SystemConnectivity.Mode = configSection == null ? ConnectivityMode.Tcp : (ConnectivityMode)Enum.Parse(typeof(ConnectivityMode), configSection.ConnectivityMode);

            var connectionString = SettingsHolder.Get <string>("NServiceBus.Transport.ConnectionString");

            if (string.IsNullOrEmpty(connectionString) && configSection != null)
            {
                connectionString = configSection.ConnectionString;
            }

            if (string.IsNullOrEmpty(connectionString) && (configSection == null || string.IsNullOrEmpty(configSection.IssuerKey) || string.IsNullOrEmpty(configSection.ServiceNamespace)))
            {
                throw new ConfigurationErrorsException("No Servicebus Connection information specified, either set the ConnectionString or set the IssuerKey and ServiceNamespace properties");
            }

            NamespaceManager namespaceClient;
            MessagingFactory factory;
            Uri serviceUri;

            if (!string.IsNullOrEmpty(connectionString))
            {
                namespaceClient = NamespaceManager.CreateFromConnectionString(connectionString);
                serviceUri      = namespaceClient.Address;
                factory         = MessagingFactory.CreateFromConnectionString(connectionString);
            }
            else
            {
                var credentials = TokenProvider.CreateSharedSecretTokenProvider(configSection.IssuerName, configSection.IssuerKey);
                serviceUri      = ServiceBusEnvironment.CreateServiceUri("sb", configSection.ServiceNamespace, string.Empty);
                namespaceClient = new NamespaceManager(serviceUri, credentials);
                factory         = MessagingFactory.Create(serviceUri, credentials);
            }
            Address.OverrideDefaultMachine(serviceUri.ToString());


            NServiceBus.Configure.Instance.Configurer.RegisterSingleton <NamespaceManager>(namespaceClient);
            NServiceBus.Configure.Instance.Configurer.RegisterSingleton <MessagingFactory>(factory);
            NServiceBus.Configure.Component <AzureServiceBusQueueCreator>(DependencyLifecycle.InstancePerCall);

            var config = NServiceBus.Configure.Instance;

            config.Configurer.ConfigureComponent <AzureServiceBusDequeueStrategy>(DependencyLifecycle.InstancePerCall);

            if (configSection == null)
            {
                //hack: just to get the defaults, we should refactor this to support specifying the values on the NServiceBus/Transport connection string as well
                configSection = new AzureServiceBusQueueConfig();
            }

            if (!config.Configurer.HasComponent <ISendMessages>())
            {
                config.Configurer.ConfigureComponent <AzureServiceBusMessageQueueSender>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureProperty <AzureServiceBusMessageQueueSender>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);

                config.Configurer.ConfigureComponent <AzureServiceBusQueueNotifier>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureComponent <AzureServicebusQueueClientCreator>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.LockDuration, TimeSpan.FromMilliseconds(configSection.LockDuration));
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.MaxSizeInMegabytes, configSection.MaxSizeInMegabytes);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.RequiresDuplicateDetection, configSection.RequiresDuplicateDetection);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.RequiresSession, configSection.RequiresSession);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.DefaultMessageTimeToLive, TimeSpan.FromMilliseconds(configSection.DefaultMessageTimeToLive));
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.EnableDeadLetteringOnMessageExpiration, configSection.EnableDeadLetteringOnMessageExpiration);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.DuplicateDetectionHistoryTimeWindow, TimeSpan.FromMilliseconds(configSection.DuplicateDetectionHistoryTimeWindow));
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
                config.Configurer.ConfigureProperty <AzureServicebusQueueClientCreator>(t => t.EnableBatchedOperations, configSection.EnableBatchedOperations);
                config.Configurer.ConfigureProperty <AzureServiceBusQueueNotifier>(t => t.ServerWaitTime, configSection.ServerWaitTime);
                config.Configurer.ConfigureProperty <AzureServiceBusQueueNotifier>(t => t.BatchSize, configSection.BatchSize);
                config.Configurer.ConfigureProperty <AzureServiceBusQueueNotifier>(t => t.BackoffTimeInSeconds, configSection.BackoffTimeInSeconds);
            }

            if (!config.Configurer.HasComponent <IPublishMessages>() &&
                !config.Configurer.HasComponent <IManageSubscriptions>())
            {
                config.Configurer.ConfigureComponent <AzureServicebusSubscriptionClientCreator>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureComponent <AzureServiceBusTopicSubscriptionManager>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureComponent <AzureServiceBusTopicPublisher>(DependencyLifecycle.InstancePerCall);
                config.Configurer.ConfigureComponent <AzureServiceBusTopicNotifier>(DependencyLifecycle.InstancePerCall);

                config.Configurer.ConfigureProperty <AzureServiceBusTopicPublisher>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.LockDuration, TimeSpan.FromMilliseconds(configSection.LockDuration));
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.RequiresSession, configSection.RequiresSession);
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.DefaultMessageTimeToLive, TimeSpan.FromMilliseconds(configSection.DefaultMessageTimeToLive));
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.EnableDeadLetteringOnMessageExpiration, configSection.EnableDeadLetteringOnMessageExpiration);
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.EnableDeadLetteringOnFilterEvaluationExceptions, configSection.EnableDeadLetteringOnFilterEvaluationExceptions);
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.MaxDeliveryCount, configSection.MaxDeliveryCount);
                config.Configurer.ConfigureProperty <AzureServicebusSubscriptionClientCreator>(t => t.EnableBatchedOperations, configSection.EnableBatchedOperations);
                config.Configurer.ConfigureProperty <AzureServiceBusTopicNotifier>(t => t.ServerWaitTime, configSection.ServerWaitTime);
                config.Configurer.ConfigureProperty <AzureServiceBusTopicNotifier>(t => t.BatchSize, configSection.BatchSize);
                config.Configurer.ConfigureProperty <AzureServiceBusTopicNotifier>(t => t.BackoffTimeInSeconds, configSection.BackoffTimeInSeconds);
            }
        }