Example #1
0
        public ServiceBusListenerTests()
        {
            _mockExecutor = new Mock <ITriggeredFunctionExecutor>(MockBehavior.Strict);

            MessageHandlerOptions messageOptions  = new MessageHandlerOptions(ExceptionReceivedHandler);
            MessageReceiver       messageReceiver = new MessageReceiver(_testConnection, _entityPath);

            _mockMessageProcessor = new Mock <MessageProcessor>(MockBehavior.Strict, messageReceiver, messageOptions);

            ServiceBusConfiguration config = new ServiceBusConfiguration
            {
                MessageOptions = messageOptions
            };

            _mockMessagingProvider   = new Mock <MessagingProvider>(MockBehavior.Strict, config);
            config.MessagingProvider = _mockMessagingProvider.Object;

            _mockMessagingProvider.Setup(p => p.CreateMessageProcessor(_entityPath, _testConnection))
            .Returns(_mockMessageProcessor.Object);

            ServiceBusTriggerExecutor triggerExecutor = new ServiceBusTriggerExecutor(_mockExecutor.Object);
            var mockServiceBusAccount = new Mock <ServiceBusAccount>(MockBehavior.Strict);

            mockServiceBusAccount.Setup(a => a.ConnectionString).Returns(_testConnection);

            _listener = new ServiceBusListener(_entityPath, triggerExecutor, config, mockServiceBusAccount.Object);
        }
Example #2
0
    public void UseAzureServiceBus_Should_Populate_ServiceBusConfiguration()
    {
        // Arrange
        ServiceBusConfiguration cachedConfiguration = null !;
        var expectedConnectionString       = _fixture.Fixture.Create <string>();
        var expectedSubscriptionClientName = _fixture.Fixture.Create <string>();

        // Act
        _fixture.HostBuilder.UseAzureServiceBus(
            registerHandlers: collection => { },
            subscribeToEvents: processor => { },
            options: configuration =>
        {
            configuration.SubscriptionClientName          = expectedSubscriptionClientName;
            configuration.AzureServiceBusConnectionString = expectedConnectionString;
            cachedConfiguration = configuration;
        });

        // Assert
        cachedConfiguration
        .SubscriptionClientName
        .Should()
        .Be(expectedSubscriptionClientName);

        cachedConfiguration
        .AzureServiceBusConnectionString
        .Should()
        .Be(expectedConnectionString);
    }
Example #3
0
        public RouterConfigurationSourceSample()
        {
            RegisterHandler <IMessageHandler>("handler")
            .ToListen(x =>
            {
                x.AddPublishSubscribeChannel("inputtopicnewrelease2", "subs", "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=");
                x.AddPointToPointChannel("inputqueuenewrelease2", "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=");
            })
            .ForMessage <Message>().Using <MessageHandler>(x =>
            {
                x.With((request, handler, context) => handler.Handle(request, context)).When((request, handler, context) => true);
            }).OnEntry(x => x.BuildOperationIdWith(y => "operationid"));

            RegisterHandler <IMessageHandler>("handler")
            .ToListen(x => {
                x.AddPointToPointChannel("outputqueuenewrelease1", "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=");
                x.AddPointToPointChannel("outputqueuenewrelease2", "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=");
                x.AddPointToPointChannel("outputqueuenewrelease3", "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=");
            })
            .ForMessage <Message>().Using <MessageHandlerB>(x =>
            {
                x.With((request, handler, context) => handler.Handle(request, context)).When((request, handler, context) => true);
            });


            RegisterOrigin("newcoreapp", "123");

            RegisterEndPoint("endpoint")
            .ForMessage <Message>()
            //.AsClaimCheck()
            .To(x =>
            {
                x.Add("Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=", "outputqueuenewrelease1");
                x.Add("Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=", "outputqueuenewrelease2");
                x.Add("Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=", "outputqueuenewrelease3");
            });

            var config = new ServiceBusConfiguration()
            {
                ClientId          = "e40d9bbb-c50f-436e-8a5f-8494e0f84242",
                ClientSecret      = "OkDfucL/DT9h1FISlh79OfAnmwu9/h/TRx4ryFG+hIc=",
                ConnectionString  = "Endpoint=sb://raulqueuetests.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=8WpD2e6cWAW3Qj4AECuzdKCySM4M+ZAIW2VGRHvvXlo=",
                ResourceGroupName = "TestQueueApps",
                ResourceName      = "raulqueuetests",
                SubscriptionId    = "e759b3f9-6ac3-4f9d-b479-1ba4471235cd",
                TenantId          = "77f43f1b-5708-46dd-92a2-5f99f19e9b1f"
            };

            this.RegisterQueue("inputqueuenewrelease2", config);

            this.RegisterTopic("inputtopicnewrelease2", config);

            this.RegisterSubscriptionToTopic("subs", "inputtopicnewrelease2", config);

            this.RegisterQueue("outputqueuenewrelease1", config);

            this.RegisterQueue("outputqueuenewrelease2", config);

            this.RegisterQueue("outputqueuenewrelease3", config);
        }
Example #4
0
        // Please set the following connection strings in app.config for this WebJob to run:
        // AzureWebJobsDashboard and AzureWebJobsStorage
        static void Main()
        {
            _servicesBusConnectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);

            var config = new JobHostConfiguration();

            try
            {
                if (config.IsDevelopment)
                {
                    config.UseDevelopmentSettings();
                }

                ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration
                {
                    ConnectionString = _servicesBusConnectionString
                };
                config.UseServiceBus(serviceBusConfig);

                var host = new JobHost(config);
                // The following code ensures that the WebJob will be running continuously
                host.RunAndBlock();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            ///Get message from queue

            Console.WriteLine("from webjob");
        }
Example #5
0
        static void Main()
        {
            try
            {
                System.Net.ServicePointManager.DefaultConnectionLimit = System.Int32.MaxValue;
                XmlConfigurator.Configure();

                var config = new JobHostConfiguration
                {
                    JobActivator = new UnityJobActivatorDependencyScope(UnityConfig.GetConfiguredContainer())
                };

                var sbConfig = new ServiceBusConfiguration
                {
                    MessageOptions = new OnMessageOptions
                    {
                        AutoComplete = false
                    }
                };

                sbConfig.MessageOptions.MaxConcurrentCalls = 1;
                config.UseServiceBus(sbConfig);

                var host = new JobHost(config);

                //host.CallAsync(typeof(Functions).GetMethod("SyncTest"));

                host.RunAndBlock();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
 public ServiceBusSubscriptionListenerFactory(string topicName, string subscriptionName, ITriggeredFunctionExecutor executor, ServiceBusConfiguration config)
 {
     _topicName        = topicName;
     _subscriptionName = subscriptionName;
     _executor         = executor;
     _config           = config;
 }
Example #7
0
    /// <summary>
    /// Registers all types required to send and receive messages to/from
    /// Azure Service Bus.
    /// </summary>
    /// <param name="hostBuilder">Generic host builder</param>
    /// <param name="registerHandlers">Action to register message handlers in DI container</param>
    /// <param name="subscribeToEvents">Action to map events to their handlers</param>
    /// <param name="options">Azure Service Bus configuration parameters</param>
    /// <returns></returns>
    public static IHostBuilder UseAzureServiceBus(
        this IHostBuilder hostBuilder,
        Action <IServiceCollection> registerHandlers,
        Action <IEventsProcessor> subscribeToEvents,
        Action <ServiceBusConfiguration>?options = null)
    {
        hostBuilder.ConfigureServices((ctx, services) =>
        {
            ServiceBusConfiguration?config = null;
            if (options is not null)
            {
                config = new ServiceBusConfiguration();
                options(config);
            }

            // Common services
            services.AddScoped <IMessageSerializer, MessageSerializer>();

            // Event bus client
            services.AddSingleton <IEventBusClient, EventBusClient>(provider =>
            {
                var configuration = provider.GetRequiredService <IConfiguration>();
                return(new EventBusClient(
                           connectionString: config?.AzureServiceBusConnectionString ??
                           configuration["ServiceBusSettings:EventBusConnection"]));
            });

            // Sending message types
            services.AddScoped <IEventsPublisher, EventsPublisher>();

            // Processing message types
            services.AddSingleton <IEventsSubscriptionManager, EventsSubscriptionManager>();
            services.AddSingleton <IEventsProcessor, EventsProcessor>(provider =>
            {
                var subscriptionManager = provider.GetRequiredService <IEventsSubscriptionManager>();
                var logger             = provider.GetRequiredService <ILogger <EventsProcessor> >();
                var configuration      = provider.GetRequiredService <IConfiguration>();
                var processingPipeline = provider.GetRequiredService <IMessageProcessingPipeline>();
                var eventBusClient     = provider.GetRequiredService <IEventBusClient>();
                var eventProcessor     = new EventsProcessor(
                    subscriptionManager: subscriptionManager,
                    logger: logger,
                    subscriptionClientName: config?.SubscriptionClientName ??
                    configuration["ServiceBusSettings:SubscriptionClientName"],
                    processingPipeline: processingPipeline,
                    eventBusClient: eventBusClient);

                subscribeToEvents(eventProcessor);

                return(eventProcessor);
            });

            services.AddSingleton <IMessageProcessingPipeline, EventProcessingPipeline>();
            services.AddHostedService <EventsProcessorHostedService>();

            registerHandlers(services);
        });

        return(hostBuilder);
    }
Example #8
0
 public ServiceBusTriggerBinding(string parameterName, Type parameterType, ITriggerDataArgumentBinding <Message> argumentBinding, ServiceBusAccount account,
                                 ServiceBusConfiguration config, string queueName)
     : this(parameterName, parameterType, argumentBinding, account, config)
 {
     _queueName  = queueName;
     _entityPath = queueName;
 }
        public void Constructor_SetsExpectedDefaults()
        {
            ServiceBusConfiguration config = new ServiceBusConfiguration();

            Assert.Equal(16, config.MessageOptions.MaxConcurrentCalls);
            Assert.Equal(0, config.PrefetchCount);
        }
Example #10
0
        public async Task SendAsync(Student student, ServiceBusConfiguration config)
        {
            queueClient = new QueueClient(config.ConnectionString, config.QueueName);
            await SendMessagesAsync(student);

            await queueClient.CloseAsync();
        }
Example #11
0
        public ServiceBusArgumentsDisplayTestsFixture()
            : base(cleanStorageAccount: true)
        {
            _hostConfiguration = new JobHostConfiguration(StorageAccount.ConnectionString)
            {
                TypeLocator = new ExplicitTypeLocator(
                    typeof(ServiceBusArgumentsDisplayFunctions),
                    typeof(DoneNotificationFunction))
            };

            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();

            serviceBusConfig.ConnectionString = ServiceBusAccount;
            _serviceBusConnectionString       = serviceBusConfig.ConnectionString;
            _hostConfiguration.UseServiceBus(serviceBusConfig);

            _namespaceManager = NamespaceManager.CreateFromConnectionString(_serviceBusConnectionString);

            // ensure we're starting in a clean state
            CleanServiceBusQueues();

            // now run the entire end to end scenario, causing all the job functions
            // to be invoked
            RunEndToEnd();
        }
Example #12
0
    public void UseAzureServiceBus_SendOnly_Should_Populate_ServiceBusConfiguration()
    {
        // Arrange
        ServiceBusConfiguration cachedConfiguration = null !;
        var expectedConnectionString       = _fixture.Fixture.Create <string>();
        var expectedSubscriptionClientName = _fixture.Fixture.Create <string>();

        // Act
        _fixture.HostBuilder.UseAzureServiceBus(configuration =>
        {
            configuration.SubscriptionClientName          = expectedSubscriptionClientName;
            configuration.AzureServiceBusConnectionString = expectedConnectionString;
            cachedConfiguration = configuration;
        });

        // Assert
        cachedConfiguration
        .SubscriptionClientName
        .Should()
        .Be(expectedSubscriptionClientName);

        cachedConfiguration
        .AzureServiceBusConnectionString
        .Should()
        .Be(expectedConnectionString);
    }
        public async void GetProductChanged()
        {
            _configuration = new ConfigurationBuilder()
                             .SetBasePath(Directory.GetCurrentDirectory())
                             .AddJsonFile("appsettings.json")
                             .Build();

            serviceBusConfiguration = _configuration.GetSection("serviceBus").Get <ServiceBusConfiguration>();

            var serviceBusNamespace = _configuration.GetServiceBusNamespace();

            var topic = serviceBusNamespace.Topics.GetByName(TopicName);

            await topic.Subscriptions.DeleteByNameAsync(SubscriptionName);

            if (!topic.Subscriptions.List()
                .Any(subscription => subscription.Name
                     .Equals(SubscriptionName, StringComparison.InvariantCultureIgnoreCase)))
            {
                topic.Subscriptions
                .Define(SubscriptionName)
                .Create();
            }

            ReceiveMessages();
        }
Example #14
0
        public async Task Initialize_PerformsExpectedRegistrations()
        {
            JobHostConfiguration config = new JobHostConfiguration();

            config.AddService <INameResolver>(new RandomNameResolver());

            TestLoggerProvider loggerProvider = new TestLoggerProvider();
            ILoggerFactory     loggerFactory  = new LoggerFactory();

            loggerFactory.AddProvider(loggerProvider);
            config.LoggerFactory = loggerFactory;

            ServiceBusConfiguration   serviceBusConfig          = new ServiceBusConfiguration();
            ServiceBusExtensionConfig serviceBusExtensionConfig = new ServiceBusExtensionConfig(serviceBusConfig);

            IExtensionRegistry extensions = config.GetService <IExtensionRegistry>();

            ITriggerBindingProvider[] triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray();
            Assert.Empty(triggerBindingProviders);
            IBindingProvider[] bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray();
            Assert.Empty(bindingProviders);

            ExtensionConfigContext context = new ExtensionConfigContext
            {
                Config = config,
            };

            serviceBusExtensionConfig.Initialize(context);

            // ensure the ServiceBusTriggerAttributeBindingProvider was registered
            triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray();
            Assert.Single(triggerBindingProviders);
            ServiceBusTriggerAttributeBindingProvider triggerBindingProvider = (ServiceBusTriggerAttributeBindingProvider)triggerBindingProviders[0];

            Assert.NotNull(triggerBindingProvider);

            // ensure the ServiceBusAttributeBindingProvider was registered
            bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray();
            Assert.Single(bindingProviders);
            ServiceBusAttributeBindingProvider bindingProvider = (ServiceBusAttributeBindingProvider)bindingProviders[0];

            Assert.NotNull(bindingProvider);

            // ensure the default MessageOptions exception handler is wired up
            var messageOptions = serviceBusConfig.MessageOptions;
            var ex             = new ServiceBusException(false);
            var args           = new ExceptionReceivedEventArgs(ex, "TestAction", "TestEndpoint", "TestEntityPath", "TestClientId");

            Assert.NotNull(serviceBusConfig.ExceptionHandler);

            // invoke the handler and make sure it logs
            await serviceBusConfig.MessageOptions.ExceptionReceivedHandler(args);

            string expectedMessage = "MessageReceiver error (Action=TestAction, ClientId=TestClientId, EntityPath=TestEntityPath, Endpoint=TestEndpoint)";
            var    logMessage      = loggerProvider.GetAllLogMessages().Single();

            Assert.Equal(LogLevel.Error, logMessage.Level);
            Assert.Equal(expectedMessage, logMessage.FormattedMessage);
            Assert.Same(ex, logMessage.Exception);
        }
 protected ServiceBusWriteClient(ServiceBusConfiguration configuration,
                                 ClientSerializer <T> serializer, IServiceBusMessageHandler messageHandler)
 {
     Serializer     = serializer ?? new JsonSerializer <T>();
     Configuration  = configuration;
     MessageHandler = messageHandler;
 }
Example #16
0
        private static StandardKernel SetupIoc()
        {
            var connectionKey = Environment.GetEnvironmentVariable(ApolloConstants.ConnectionKey, EnvironmentVariableTarget.Process) ??
                                Environment.GetEnvironmentVariable(ApolloConstants.ConnectionKey, EnvironmentVariableTarget.User) ??
                                Environment.GetEnvironmentVariable(ApolloConstants.ConnectionKey, EnvironmentVariableTarget.Machine) ??
                                throw new ArgumentException($"Environment variable '{ApolloConstants.ConnectionKey}' is not configured");

            var serverIdentifier = Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"
                                ? $"{Environment.MachineName} {Environment.GetEnvironmentVariable("APOLLO_SERVER_ID")}" // Machine name will be the ID of the container if running in docker
                                : (Environment.GetEnvironmentVariable("APOLLO_SERVER_ID") ?? $"Server {Guid.NewGuid()}");

            var configuration = new ServiceBusConfiguration
                                (
                new ServiceBusConnectionStringBuilder(connectionKey),
                serverIdentifier
                                );
            var implementations = new ApolloServiceBusImplementations(configuration)
            {
                ServerPlugins = new ApolloPlugin[]
                {
                    new EchoListenerPlugin(),
                    new MessageCounterPlugin()
                }
            };
            var container = new StandardKernel(implementations);

            container.Bind <IApolloServerRepository>().To <InMemoryApolloServerRepository>().InSingletonScope();
            return(container);
        }
Example #17
0
 public ServiceBusQueueListenerFactory(ServiceBusAccount account, string queueName, ITriggeredFunctionExecutor executor, ServiceBusConfiguration config)
 {
     _account   = account;
     _queueName = queueName;
     _executor  = executor;
     _config    = config;
 }
Example #18
0
        public async Task CustomMessageProcessorTest()
        {
            try
            {
                TestTraceWriter trace = new TestTraceWriter(TraceLevel.Info);
                _serviceBusConfig = new ServiceBusConfiguration();
                _serviceBusConfig.MessagingProvider = new CustomMessagingProvider(_serviceBusConfig, trace);

                JobHostConfiguration config = new JobHostConfiguration()
                {
                    NameResolver = _nameResolver,
                    TypeLocator  = new FakeTypeLocator(typeof(ServiceBusTestJobs))
                };
                config.Tracing.Tracers.Add(trace);
                config.UseServiceBus(_serviceBusConfig);
                JobHost host = new JobHost(config);

                await ServiceBusEndToEndInternal(typeof(ServiceBusTestJobs), host : host);

                // in addition to verifying that our custom processor was called, we're also
                // verifying here that extensions can log to the TraceWriter
                Assert.Equal(4, trace.Traces.Count(p => p.Message.Contains("Custom processor Begin called!")));
                Assert.Equal(4, trace.Traces.Count(p => p.Message.Contains("Custom processor End called!")));
            }
            finally
            {
                Cleanup();
            }
        }
        public void Initialize_PerformsExpectedRegistrations()
        {
            JobHostConfiguration config = new JobHostConfiguration();
            config.AddService<INameResolver>(new RandomNameResolver());

            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
            ServiceBusExtensionConfig serviceBusExtensionConfig = new ServiceBusExtensionConfig(serviceBusConfig);

            IExtensionRegistry extensions = config.GetService<IExtensionRegistry>();
            ITriggerBindingProvider[] triggerBindingProviders = extensions.GetExtensions<ITriggerBindingProvider>().ToArray();
            Assert.Equal(0, triggerBindingProviders.Length);
            IBindingProvider[] bindingProviders = extensions.GetExtensions<IBindingProvider>().ToArray();
            Assert.Equal(0, bindingProviders.Length);

            ExtensionConfigContext context = new ExtensionConfigContext
            {
                Config = config,
                Trace = new TestTraceWriter(TraceLevel.Verbose)
            };
            serviceBusExtensionConfig.Initialize(context);

            // ensure the ServiceBusTriggerAttributeBindingProvider was registered
            triggerBindingProviders = extensions.GetExtensions<ITriggerBindingProvider>().ToArray();
            Assert.Equal(1, triggerBindingProviders.Length);
            ServiceBusTriggerAttributeBindingProvider triggerBindingProvider = (ServiceBusTriggerAttributeBindingProvider)triggerBindingProviders[0];
            Assert.NotNull(triggerBindingProvider);

            // ensure the ServiceBusAttributeBindingProvider was registered
            bindingProviders = extensions.GetExtensions<IBindingProvider>().ToArray();
            Assert.Equal(1, bindingProviders.Length);
            ServiceBusAttributeBindingProvider bindingProvider = (ServiceBusAttributeBindingProvider)bindingProviders[0];
            Assert.NotNull(bindingProvider);
        }
Example #20
0
    /// <summary>
    /// Registers types required to send messages to Azure Service Bus.
    /// </summary>
    /// <param name="hostBuilder">Generic host builder</param>
    /// <param name="options">Azure Service Bus configuration parameters</param>
    /// <returns></returns>
    public static IHostBuilder UseAzureServiceBus(
        this IHostBuilder hostBuilder,
        Action <ServiceBusConfiguration>?options = null)
    {
        hostBuilder.ConfigureServices((ctx, services) =>
        {
            ServiceBusConfiguration?config = null;
            if (options is not null)
            {
                config = new ServiceBusConfiguration();
                options(config);
            }

            services.AddSingleton <IEventBusClient, EventBusClient>(provider =>
            {
                var configuration = provider.GetRequiredService <IConfiguration>();
                return(new EventBusClient(
                           connectionString: config?.AzureServiceBusConnectionString ??
                           configuration["ServiceBusSettings:EventBusConnection"]));
            });

            services.AddScoped <IEventsPublisher, EventsPublisher>();
            services.AddScoped <IMessageSerializer, MessageSerializer>();
        });

        return(hostBuilder);
    }
Example #21
0
        // Please set the following connection strings in app.config for this WebJob to run:
        // AzureWebJobsDashboard and AzureWebJobsStorage
        static void Main()
        {
            _servicesBusConnectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
            _namespaceManager            = NamespaceManager.CreateFromConnectionString(_servicesBusConnectionString);
            InitializeQueue();

            JobHostConfiguration configuration = new JobHostConfiguration
            {
                DashboardConnectionString = "",
                StorageConnectionString   = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.Storage)
            };
            //configuration.StorageConnectionString = ConfigurationManager.ConnectionStrings[""]

            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration
            {
                ConnectionString = _servicesBusConnectionString
            };

            configuration.UseServiceBus(serviceBusConfig);
            configuration.JobActivator = new AutofacJobActivator(AutofacContainerBuilder.BuildContainer());

            var host = new JobHost(configuration);

            // The following code ensures that the WebJob will be running continuously
            host.RunAndBlock();
        }
Example #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SubscriptionProcessor"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="serviceBusConfiguration">The configuration for the service bus.</param>
 /// <param name="currentStamp">The current stamp configuration.</param>
 /// <param name="metricsTracker">The metrics tracker.</param>
 /// <param name="subscriptionMonitor">The service monitor.</param>
 public SubscriptionProcessor(ILogger <SubscriptionProcessor> logger, IOptions <ServiceBusConfiguration> serviceBusConfiguration, IMonitor subscriptionMonitor)
 {
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _serviceBusConfiguration = serviceBusConfiguration?.Value ?? throw new ArgumentNullException(nameof(serviceBusConfiguration));
     _serviceBusConfiguration.CheckValidity();
     _subscriptionMonitor = subscriptionMonitor ?? throw new ArgumentNullException(nameof(subscriptionMonitor));
 }
        public static JobHostConfiguration CreateConfig()
        {
            var config = new JobHostConfiguration();

            // The environment is determined by the value of the "AzureWebJobsEnv" environment variable. When this
            // is set to "Development", this property will return true.
            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();
            }

            //check app.config if your connectionstrings are setup properly

            //if the box has no internet connection you can disable the connectionstrings like this, remember you use any internet enabled functions then.
            //config.DashboardConnectionString = null;
            //config.StorageConnectionString = null;

            //normally use AppSetting and ConfigManager to get paths here.
            FilesConfiguration filesConfig = new FilesConfiguration
            {
                RootPath = @"C:\Users\p.vanek\Desktop\TechDays\FileWatch"
            };

            //enable what you like to use
            config.UseFiles(filesConfig);
            config.UseTimers();

            //lots of these extensions can be found on the internet on places like nuget
            //https://www.nuget.org/packages?q=WebJobs.Extensions

            //used for local development without accidently sharing secrets
            string storageString = Environment.GetEnvironmentVariable("AzureStorageAccount");

            if (!string.IsNullOrWhiteSpace(storageString))
            {
                config.DashboardConnectionString = storageString;
                config.StorageConnectionString   = storageString;
            }


            //find servicebusString in Environment variable, otherwise find it in App.config
            string serviceBusConnection = Environment.GetEnvironmentVariable("AzureServiceBus");

            if (!string.IsNullOrWhiteSpace(serviceBusConnection))
            {
                ServiceBusConfiguration sbConfig = new ServiceBusConfiguration
                {
                    ConnectionString = serviceBusConnection
                                       //set other options if you like
                };

                config.UseServiceBus(sbConfig);
            }
            else
            {
                config.UseServiceBus();
            }

            return(config);
        }
Example #24
0
        public async Task CustomMessageProcessorTest()
        {
            try
            {
                // Pass in a separate LoggerFactory to the CusomtMessagingProvider to make validation easier.
                LoggerFactory      loggerFactory  = new LoggerFactory();
                TestLoggerProvider loggerProvider = new TestLoggerProvider();
                loggerFactory.AddProvider(loggerProvider);

                _serviceBusConfig = new ServiceBusConfiguration();
                _serviceBusConfig.MessagingProvider = new CustomMessagingProvider(_serviceBusConfig, loggerFactory);

                JobHostConfiguration config = new JobHostConfiguration()
                {
                    NameResolver  = _nameResolver,
                    TypeLocator   = new FakeTypeLocator(typeof(ServiceBusTestJobs)),
                    LoggerFactory = _loggerFactory
                };

                config.UseServiceBus(_serviceBusConfig);
                JobHost host = new JobHost(config);

                await ServiceBusEndToEndInternal(typeof(ServiceBusTestJobs), host : host);

                // in addition to verifying that our custom processor was called, we're also
                // verifying here that extensions can log
                IEnumerable <LogMessage> messages = loggerProvider.GetAllLogMessages();
                Assert.Equal(4, messages.Count(p => p.FormattedMessage.Contains("Custom processor Begin called!")));
                Assert.Equal(4, messages.Count(p => p.FormattedMessage.Contains("Custom processor End called!")));
            }
            finally
            {
                await Cleanup();
            }
        }
Example #25
0
        /// <summary>
        /// Entry point for the application.
        /// </summary>
        internal static void Main()
        {
            JobHost host;
            JobHostConfiguration    config;
            ServiceBusConfiguration serviceBusConfig;

            try
            {
                ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey =
                    Service.Configuration.InstrumentationKey;

                config = new JobHostConfiguration(Service.Configuration.StorageConnectionString);

                serviceBusConfig = new ServiceBusConfiguration
                {
                    ConnectionString = Service.Configuration.ServiceBusConnectionString
                };

                config.Queues.MaxDequeueCount   = 3;
                config.Queues.BatchSize         = 10;
                config.Queues.NewBatchThreshold = 15;
                config.Tracing.ConsoleLevel     = TraceLevel.Verbose;
                config.UseServiceBus(serviceBusConfig);
                config.UseTimers();

                host = new JobHost(config);
                host.RunAndBlock();
            }
            finally
            {
                config           = null;
                host             = null;
                serviceBusConfig = null;
            }
        }
Example #26
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

            IConfigurationRoot configuration = builder.Build();

            var serviceBusConfiguration = new ServiceBusConfiguration();
            var section = configuration.GetSection("ServiceBus");

            section.Bind(serviceBusConfiguration);

            var orderQueueClient = new ServiceBusCommandQueueClient(
                new Dictionary <string, Type>(),
                new ServiceBusNamespaceFactory(serviceBusConfiguration),
                new QueueClientFactory(serviceBusConfiguration));

            var rfqQueueClient = new ServiceBusCommandQueueClient(
                new Dictionary <string, Type>(),
                new ServiceBusNamespaceFactory(serviceBusConfiguration),
                new QueueClientFactory(serviceBusConfiguration));

            Dictionary <string, ICommandQueueClient> ccqs = new Dictionary <string, ICommandQueueClient>
            {
                { "order-service", orderQueueClient },
                { "rfq-service", rfqQueueClient }
            };

            MainAsync(ccqs).GetAwaiter().GetResult();
        }
        public ServiceBusListenerTests()
        {
            _mockExecutor = new Mock <ITriggeredFunctionExecutor>(MockBehavior.Strict);

            string testConnection = "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123=";

            _messagingFactory = MessagingFactory.CreateFromConnectionString(testConnection);
            OnMessageOptions messageOptions = new OnMessageOptions();

            _mockMessageProcessor = new Mock <MessageProcessor>(MockBehavior.Strict, messageOptions);

            ServiceBusConfiguration config = new ServiceBusConfiguration
            {
                MessageOptions = messageOptions
            };

            _mockMessagingProvider   = new Mock <MessagingProvider>(MockBehavior.Strict, config);
            config.MessagingProvider = _mockMessagingProvider.Object;

            _mockMessagingProvider.Setup(p => p.CreateMessageProcessor(_entityPath))
            .Returns(_mockMessageProcessor.Object);

            ServiceBusTriggerExecutor triggerExecutor = new ServiceBusTriggerExecutor(_mockExecutor.Object);

            _listener = new ServiceBusListener(_messagingFactory, _entityPath, triggerExecutor, config);
        }
Example #28
0
        public void Should_be_able_to_handle_expired_message()
        {
            var handlerInvoker = new FakeMessageHandlerInvoker();
            var fakeQueue      = new FakeQueue(2);
            var configuration  = new ServiceBusConfiguration
            {
                Inbox = new InboxQueueConfiguration
                {
                    WorkQueue   = fakeQueue,
                    ErrorQueue  = fakeQueue,
                    ThreadCount = 1
                },
                MessageHandlerInvoker = handlerInvoker
            };

            using (var bus = new ServiceBus(configuration))
            {
                bus.Start();

                var timeout = DateTime.Now.AddMilliseconds(5000);

                while (fakeQueue.MessageCount < 2 && DateTime.Now < timeout)
                {
                    Thread.Sleep(5);
                }
            }

            Assert.AreEqual(1, handlerInvoker.GetInvokeCount("SimpleCommand"), "FakeHandlerInvoker was not invoked exactly once.");
            Assert.AreEqual(2, fakeQueue.MessageCount, "FakeQueue was not invoked exactly twice.");
        }
 public void PrefetchCount_GetSet()
 {
     ServiceBusConfiguration config = new ServiceBusConfiguration();
     Assert.Equal(0, config.PrefetchCount);
     config.PrefetchCount = 100;
     Assert.Equal(100, config.PrefetchCount);
 }
Example #30
0
        public override void Execute(ServiceBusConfiguration configuration)
        {
            if (ServiceBusConfiguration.ServiceBusSection == null
                ||
                ServiceBusConfiguration.ServiceBusSection.ControlInbox == null
                ||
                string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.ControlInbox.WorkQueueUri)
                ||
                string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.ControlInbox.ErrorQueueUri))
            {
                return;
            }

            configuration.ControlInbox =
                new ControlInboxQueueConfiguration
            {
                WorkQueue    = QueueManager.Instance.GetQueue(ServiceBusConfiguration.ServiceBusSection.ControlInbox.WorkQueueUri),
                ErrorQueue   = QueueManager.Instance.GetQueue(ServiceBusConfiguration.ServiceBusSection.ControlInbox.ErrorQueueUri),
                JournalQueue = string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.ControlInbox.JournalQueueUri)
                                       ? null
                                       : QueueManager.Instance.GetQueue(ServiceBusConfiguration.ServiceBusSection.ControlInbox.JournalQueueUri),
                ThreadCount               = ServiceBusConfiguration.ServiceBusSection.ControlInbox.ThreadCount,
                MaximumFailureCount       = ServiceBusConfiguration.ServiceBusSection.ControlInbox.MaximumFailureCount,
                DurationToIgnoreOnFailure = DurationToIgnoreOnFailure(ServiceBusConfiguration.ServiceBusSection.ControlInbox.DurationToIgnoreOnFailure),
                DurationToSleepWhenIdle   = DurationToSleepWhenIdle(ServiceBusConfiguration.ServiceBusSection.ControlInbox.DurationToSleepWhenIdle)
            };
        }
        public override void Execute(ServiceBusConfiguration configuration)
        {
            if (ServiceBusConfiguration.ServiceBusSection == null
                ||
                ServiceBusConfiguration.ServiceBusSection.Inbox == null
                ||
                string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.Inbox.WorkQueueUri))
            {
                return;
            }

            configuration.Inbox =
                new InboxQueueConfiguration
                {
                    WorkQueue = configuration.QueueManager.GetQueue(ServiceBusConfiguration.ServiceBusSection.Inbox.WorkQueueUri),
                    ErrorQueue = configuration.QueueManager.GetQueue(ServiceBusConfiguration.ServiceBusSection.Inbox.ErrorQueueUri),
                    JournalQueue = string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.Inbox.JournalQueueUri)
                                       ? null
                                       : configuration.QueueManager.GetQueue(ServiceBusConfiguration.ServiceBusSection.Inbox.JournalQueueUri),
                    WorkQueueStartupAction = ServiceBusConfiguration.ServiceBusSection.Inbox.WorkQueueStartupAction,
                    ThreadCount = ServiceBusConfiguration.ServiceBusSection.Inbox.ThreadCount,
                    MaximumFailureCount = ServiceBusConfiguration.ServiceBusSection.Inbox.MaximumFailureCount,
                    DurationToIgnoreOnFailure = DurationToIgnoreOnFailure(ServiceBusConfiguration.ServiceBusSection.Inbox.DurationToIgnoreOnFailure),
                    DurationToSleepWhenIdle = DurationToSleepWhenIdle(ServiceBusConfiguration.ServiceBusSection.Inbox.DurationToSleepWhenIdle),
                    Distribute = ServiceBusConfiguration.ServiceBusSection.Inbox.Distribute
                };
        }
        private SubscriptionManager GetSubscriptionManager(SubscribeOption subscribe)
        {
            var workQueue = new Mock <IQueue>();

            workQueue.Setup(m => m.Uri).Returns(new Uri(WorkQueueUri));

            var serviceBusConfiguration = new ServiceBusConfiguration
            {
                Inbox = new InboxQueueConfiguration
                {
                    WorkQueue = workQueue.Object
                }
            };
            var subscriptionConfiguration = SubscriptionSection.Configuration();

            subscriptionConfiguration.Subscribe = subscribe;

            var serviceBusEvents = new ServiceBusEvents();

            var subscriptionManager = new SubscriptionManager(serviceBusEvents,
                                                              serviceBusConfiguration, subscriptionConfiguration,
                                                              new ScriptProvider(new ScriptProviderConfiguration()), DatabaseContextFactory, DatabaseGateway);

            serviceBusEvents.OnStarted(this, new PipelineEventEventArgs(new Mock <IPipelineEvent>().Object));

            return(subscriptionManager);
        }
 public ServiceBusService(IConfiguration configuration)
 {
     _configuration           = configuration;
     _serviceBusConfiguration = _configuration.GetSection("servicebus").Get <ServiceBusConfiguration>();
     _namespace      = _configuration.GetServiceBusNamespace();
     _cancelMessages = new CancellationTokenSource();
 }
 public ServiceBusListener(MessagingFactory messagingFactory, string entityPath, ServiceBusTriggerExecutor triggerExecutor, ServiceBusConfiguration config)
 {
     _messagingFactory = messagingFactory;
     _entityPath = entityPath;
     _triggerExecutor = triggerExecutor;
     _cancellationTokenSource = new CancellationTokenSource();
     _messageProcessor = config.MessagingProvider.CreateMessageProcessor(entityPath);
 }
 public ServiceBusQueueListenerFactory(ServiceBusAccount account, string queueName, ITriggeredFunctionExecutor executor, AccessRights accessRights, ServiceBusConfiguration config)
 {
     _namespaceManager = account.NamespaceManager;
     _messagingFactory = account.MessagingFactory;
     _queueName = queueName;
     _executor = executor;
     _accessRights = accessRights;
     _config = config;
 }
        /// <summary>
        /// Creates a new <see cref="ServiceBusExtensionConfig"/> instance.
        /// </summary>
        /// <param name="serviceBusConfig">The <see cref="ServiceBusConfiguration"></see> to use./></param>
        public ServiceBusExtensionConfig(ServiceBusConfiguration serviceBusConfig)
        {
            if (serviceBusConfig == null)
            {
                throw new ArgumentNullException("serviceBusConfig");
            }

            _serviceBusConfig = serviceBusConfig;
        }
 public ServiceBusSubscriptionListenerFactory(ServiceBusAccount account, string topicName, string subscriptionName, ITriggeredFunctionExecutor executor, AccessRights accessRights, ServiceBusConfiguration config)
 {
     _namespaceManager = account.NamespaceManager;
     _messagingFactory = account.MessagingFactory;
     _topicName = topicName;
     _subscriptionName = subscriptionName;
     _executor = executor;
     _accessRights = accessRights;
     _config = config;
 }
        public ServiceBusAttributeBindingProviderTests()
        {
            Mock<INameResolver> mockResolver = new Mock<INameResolver>(MockBehavior.Strict);

            ServiceBusConfiguration config = new ServiceBusConfiguration();
            _mockMessagingProvider = new Mock<MessagingProvider>(MockBehavior.Strict, config);
            
            config.MessagingProvider = _mockMessagingProvider.Object;
            _provider = new ServiceBusAttributeBindingProvider(mockResolver.Object, config);
        }
        public void ConnectionString_ReturnsExpectedDefaultUntilSetExplicitly()
        {
            ServiceBusConfiguration config = new ServiceBusConfiguration();

            string defaultConnection = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
            Assert.Equal(defaultConnection, config.ConnectionString);

            string testConnection = "testconnection";
            config.ConnectionString = testConnection;
            Assert.Equal(testConnection, config.ConnectionString);
        }
        public MessagingProviderTests()
        {
            string defaultConnection = "Endpoint=sb://default.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123=";
            _config = new ServiceBusConfiguration
            {
                ConnectionString = defaultConnection
            };
            _provider = new MessagingProvider(_config);

            string overrideConnection = "Endpoint=sb://override.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123=";
            Environment.SetEnvironmentVariable("AzureWebJobsServiceBusOverride", overrideConnection);
        }
        public override void Execute(ServiceBusConfiguration configuration)
        {
            if (ServiceBusConfiguration.ServiceBusSection == null)
            {
                configuration.RemoveMessagesNotHandled = false;

                return;
            }

            configuration.RemoveMessagesNotHandled = ServiceBusConfiguration.ServiceBusSection.RemoveMessagesNotHandled;
            configuration.CompressionAlgorithm = ServiceBusConfiguration.ServiceBusSection.CompressionAlgorithm;
            configuration.EncryptionAlgorithm = ServiceBusConfiguration.ServiceBusSection.EncryptionAlgorithm;
        }
 public ServiceBusTriggerBinding(string parameterName, ITriggerDataArgumentBinding<BrokeredMessage> argumentBinding,
     ServiceBusAccount account, string topicName, string subscriptionName, AccessRights accessRights, ServiceBusConfiguration config)
 {
     _parameterName = parameterName;
     _argumentBinding = argumentBinding;
     _account = account;
     _namespaceName = ServiceBusClient.GetNamespaceName(account);
     _topicName = topicName;
     _subscriptionName = subscriptionName;
     _entityPath = SubscriptionClient.FormatSubscriptionPath(topicName, subscriptionName);
     _accessRights = accessRights;
     _config = config;
 }
 public ServiceBusTriggerBinding(string parameterName, Type parameterType, 
     ITriggerDataArgumentBinding<BrokeredMessage> argumentBinding, ServiceBusAccount account, string queueName, AccessRights accessRights, ServiceBusConfiguration config)
 {
     _parameterName = parameterName;
     _converter = CreateConverter(parameterType);
     _argumentBinding = argumentBinding;
     _account = account;
     _namespaceName = ServiceBusClient.GetNamespaceName(account);
     _queueName = queueName;
     _entityPath = queueName;
     _accessRights = accessRights;
     _config = config;
 }
        public ServiceBusAttributeBindingProvider(INameResolver nameResolver, ServiceBusConfiguration config)
        {
            if (nameResolver == null)
            {
                throw new ArgumentNullException("nameResolver");
            }
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }

            _nameResolver = nameResolver;
            _config = config;
        }
        public static void Main()
        {
            _servicesBusConnectionString = ConfigurationManager.ConnectionStrings["AzureWebJobsServiceBus"].ConnectionString;
            _namespaceManager = NamespaceManager.CreateFromConnectionString(_servicesBusConnectionString);
            CreateStartMessage();

            JobHostConfiguration config = new JobHostConfiguration();
            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration
            {
                ConnectionString = _servicesBusConnectionString
            };
            config.UseServiceBus(serviceBusConfig);

            JobHost host = new JobHost(config);
            host.RunAndBlock();
        }
        public static void Main()
        {
            _servicesBusConnectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
            _namespaceManager = NamespaceManager.CreateFromConnectionString(_servicesBusConnectionString);
            CreateStartMessage();

            JobHostConfiguration config = new JobHostConfiguration();
            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration
            {
                ConnectionString = _servicesBusConnectionString
            };
            config.UseServiceBus(serviceBusConfig);

            JobHost host = new JobHost(config);
            host.RunAndBlock();
        }
        public void Should_be_able_to_set_sender()
        {
            var configurator = new TransportMessageConfigurator(this);
            var configuration = new ServiceBusConfiguration
            {
                Inbox = new InboxQueueConfiguration
                {
                    WorkQueue = new NullQueue("null-queue://./work-queue")
                }
            };

            Assert.AreEqual("null-queue://./work-queue", configurator.TransportMessage(configuration).SenderInboxWorkQueueUri);

            configurator.WithSender("null-queue://./another-queue");

            Assert.AreEqual("null-queue://./another-queue", configurator.TransportMessage(configuration).SenderInboxWorkQueueUri);
        }
        public override void Execute(ServiceBusConfiguration configuration)
        {
            if (ServiceBusConfiguration.ServiceBusSection == null
                ||
                ServiceBusConfiguration.ServiceBusSection.Worker == null
                ||
                string.IsNullOrEmpty(ServiceBusConfiguration.ServiceBusSection.Worker.DistributorControlWorkQueueUri))
            {
                return;
            }

            configuration.Worker =
                new WorkerConfiguration(
                    configuration.QueueManager.CreateQueue(
                        ServiceBusConfiguration.ServiceBusSection.Worker.DistributorControlWorkQueueUri),
                        ServiceBusConfiguration.ServiceBusSection.Worker.ThreadAvailableNotificationIntervalSeconds);
        }
        public void UseServiceBus_ServiceBusConfigurationProvided_PerformsExpectedRegistration()
        {
            JobHostConfiguration config = new JobHostConfiguration();

            IExtensionRegistry extensions = config.GetService<IExtensionRegistry>();
            IExtensionConfigProvider[] configProviders = extensions.GetExtensions<IExtensionConfigProvider>().ToArray();
            Assert.Equal(0, configProviders.Length);

            ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration
            {
                ConnectionString = "test service bus connection"
            };
            config.UseServiceBus(serviceBusConfig);

            // verify that the service bus config provider was registered
            configProviders = extensions.GetExtensions<IExtensionConfigProvider>().ToArray();
            Assert.Equal(1, configProviders.Length);

            ServiceBusExtensionConfig serviceBusExtensionConfig = (ServiceBusExtensionConfig)configProviders.Single();
            Assert.Same(serviceBusConfig, serviceBusExtensionConfig.Config);
        }
        public ServiceBusListenerTests()
        {
            _mockExecutor = new Mock<ITriggeredFunctionExecutor>(MockBehavior.Strict);

            string testConnection = "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123=";
            MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(testConnection);
            OnMessageOptions messageOptions = new OnMessageOptions();
            _mockMessageProcessor = new Mock<MessageProcessor>(MockBehavior.Strict, messageOptions);
            
            ServiceBusConfiguration config = new ServiceBusConfiguration
            {
                MessageOptions = messageOptions
            };
            Mock<MessagingProvider> mockMessagingProvider = new Mock<MessagingProvider>(MockBehavior.Strict, config);
            config.MessagingProvider = mockMessagingProvider.Object;

            mockMessagingProvider.Setup(p => p.CreateMessageProcessor(_entityPath))
                .Returns(_mockMessageProcessor.Object);

            ServiceBusTriggerExecutor triggerExecutor = new ServiceBusTriggerExecutor(_mockExecutor.Object);
            _listener = new ServiceBusListener(messagingFactory, _entityPath, triggerExecutor, config);
        }
 public void Constructor_SetsExpectedDefaults()
 {
     ServiceBusConfiguration config = new ServiceBusConfiguration();
     Assert.Equal(16, config.MessageOptions.MaxConcurrentCalls);
 }