コード例 #1
0
        public static async Task AddRulesAsync(AzureServiceBusConfiguration configuration)
        {
            ServiceBusConnectionStringBuilder connectionStringBuilder = new ServiceBusConnectionStringBuilder(configuration.ConnectionString);

            foreach (Topic topic1 in configuration.Topics)
            {
                Topic topic = topic1;
                Console.WriteLine("Topic: " + topic.Name + ". Start");
                connectionStringBuilder.EntityPath = topic.Name;
                foreach (Subscriber subscriber1 in topic.Subscribers)
                {
                    Subscriber subscriber = subscriber1;
                    Console.WriteLine("Subscriber: " + subscriber.Name + ". Start");
                    SubscriptionClient subscriptionClient = new SubscriptionClient(connectionStringBuilder, subscriber.Name, ReceiveMode.PeekLock, (RetryPolicy)null);
                    await ServiceBusSubscriber.AddRules(subscriber, subscriptionClient);

                    Console.WriteLine("Subscriber: " + subscriber.Name + ". End");
                    await subscriptionClient.CloseAsync();

                    subscriptionClient = (SubscriptionClient)null;
                    subscriber         = (Subscriber)null;
                }
                Console.WriteLine("Topic: " + topic.Name + ". End");
                topic = (Topic)null;
            }
        }
        public async Task InitializeEventBusAsync(IConfiguration configuration)
        {
            AzureServiceBusConfiguration azureAzureServiceBusConfiguration = new AzureServiceBusConfiguration();

            configuration
            .GetSection(SettingKeyConstants.ServiceBusConfigurationKey)
            .Bind(azureAzureServiceBusConfiguration);

            ServiceBusConnectionStringBuilder connectionStringBuilder =
                new ServiceBusConnectionStringBuilder(azureAzureServiceBusConfiguration.ConnectionString);

            foreach (Topic topic in azureAzureServiceBusConfiguration.Topics)
            {
                Console.WriteLine($"Topic: {topic.Name}. Start");

                connectionStringBuilder.EntityPath = topic.Name;

                foreach (Subscriber subscriber in topic.Subscribers)
                {
                    Console.WriteLine($"Subscriber: {subscriber.Name}. Start");

                    SubscriptionClient subscriptionClient =
                        new SubscriptionClient(connectionStringBuilder, subscriber.Name);

                    await AddRules(subscriber, subscriptionClient);

                    Console.WriteLine($"Subscriber: {subscriber.Name}. End");

                    await subscriptionClient.CloseAsync();
                }

                Console.WriteLine($"Topic: {topic.Name}. End");
            }
        }
コード例 #3
0
 public AzureTopicAddress(AzureServiceBusConfiguration sbConfiguration, AuthenticationConfiguration authConfigruation, string middlewareName, string middlewareReferenceId)
 {
     ServiceBusConfiguration     = sbConfiguration;
     AuthenticationConfiguration = authConfigruation;
     TopicName         = middlewareName;
     SubscriptionName  = $"{middlewareName}-{middlewareReferenceId}";
     CorrelationFilter = middlewareReferenceId;
 }
        public void ConfigureBinding_BindingIsNull_Throws()
        {
            // Arrange
            // Act
            var config = new AzureServiceBusConfiguration();

            // Assert
            Assert.Throws<ArgumentNullException>(() => config.ConfigureBinding(null));
        }
コード例 #5
0
 public ReceivingEndpoint(AzureServiceBusConfiguration configuration,
                          IServiceBusManagementClient sbManagementClient,
                          string topicName,
                          IEnumerable <string> eventMessageTypeNames)
 {
     this.configuration         = configuration;
     this.sbManagementClient    = sbManagementClient;
     this.topicName             = topicName;
     this.eventMessageTypeNames = eventMessageTypeNames;
 }
        public void MaxConcurrentRequests_GreaterThenMinConcurrent_IsSet(int maxConcurrentRequest)
        {
            // Arrange
            // Act
            var config = new AzureServiceBusConfiguration();
            config.MaxConcurrentRequests = maxConcurrentRequest;

            // Assert
            Assert.Equal(maxConcurrentRequest, config.MaxConcurrentRequests);
        }
コード例 #7
0
        public async static Task Main(string[] args)
        {
            var host = new HostBuilder()
                       .ConfigureServices((hostContext, services) =>

            {
                services.AddLogging();

                var subscriptions = new Subscription[]
                {
                    new AzureServiceBusSubscription <GreetingAsyncEvent>(
                        typeof(GreetingAsyncEvent),
                        new SubscriptionName(GreetingEventAsyncMessageMapper.Topic),
                        new ChannelName("paramore.example.greeting"),
                        new RoutingKey(GreetingEventAsyncMessageMapper.Topic),
                        timeoutInMilliseconds: 400,
                        makeChannels: OnMissingChannel.Validate,
                        requeueCount: 3,
                        isAsync: true),
                    new AzureServiceBusSubscription <GreetingEvent>(
                        typeof(GreetingEvent),
                        new SubscriptionName(GreetingEventMessageMapper.Topic),
                        new ChannelName("paramore.example.greeting"),
                        new RoutingKey(GreetingEventMessageMapper.Topic),
                        timeoutInMilliseconds: 400,
                        makeChannels: OnMissingChannel.Validate,
                        requeueCount: 3,
                        isAsync: false)
                };

                //create the gateway
                var asbConfig = new AzureServiceBusConfiguration("Endpoint=sb://fim-development-bus.servicebus.windows.net/;Authentication=Managed Identity", true);

                var asbConsumerFactory = new AzureServiceBusConsumerFactory(asbConfig);
                services.AddServiceActivator(options =>
                {
                    options.Subscriptions  = subscriptions;
                    options.ChannelFactory = new AzureServiceBusChannelFactory(asbConsumerFactory);
                }).UseInMemoryOutbox()
                .UseExternalBus(AzureServiceBusMessageProducerFactory.Get(asbConfig))
                .AutoFromAssemblies();


                services.AddHostedService <ServiceActivatorHostedService>();
            })
                       .ConfigureLogging((hostingContext, logging) => {
                logging.SetMinimumLevel(LogLevel.Information);
                logging.AddConsole();
            })
                       .UseConsoleLifetime()
                       .Build();

            await host.RunAsync();
        }
        public void AzureServiceBusConfiguration_BaseAddress_IsSet()
        {
            // Arrange
            string baseAddress = "http://localhost";

            // Act
            var config = new AzureServiceBusConfiguration(baseAddress);

            // Assert
            Assert.Equal(new Uri(baseAddress), config.BaseAddress);
        }
コード例 #9
0
        public static async Task InitializeAsync(
            IConfigurationRoot configuration,
            string sectionName = "AzureServiceBus")
        {
            Console.WriteLine("Start Azure Service Bus initialization....");
            AzureServiceBusConfiguration azureServiceBusConfiguration = new AzureServiceBusConfiguration();

            configuration.GetSection(sectionName).Bind((object)azureServiceBusConfiguration);
            await ServiceBusSubscriber.AddRulesAsync(azureServiceBusConfiguration);

            Console.WriteLine("End Azure Service Bus initialization....");
        }
コード例 #10
0
        internal AzureConfiguration(ApplicationConfiguration application)
        {
            if (application == null)
            {
                throw new ArgumentNullException(nameof(application));
            }

            Application = application.Extensibility(extensibility =>
            {
                _blobStorage = extensibility.Register(() => new AzureBlobStorageConfiguration(application));
                _serviceBus  = extensibility.Register(() => new AzureServiceBusConfiguration(application));
            });
        }
        public void ConfigureBinding_BindingPassed_ReturnsBindingsParameters()
        {
            // Arrange
            var config = new AzureServiceBusConfiguration();

            var binding = new WebHttpRelayBinding();

            // Act
            var bindingsParameters = config.ConfigureBinding(binding);
            var bindingParameter = bindingsParameters.Find<TransportClientEndpointBehavior>();

            // Assert
            Assert.NotNull(bindingParameter);
        }
        public IHealthChecksBuilder AddEventBusHealthCheck(IHealthChecksBuilder healthChecksBuilder, IConfiguration configuration)
        {
            AzureServiceBusConfiguration azureServiceBusConfiguration = new AzureServiceBusConfiguration();

            configuration
            .GetSection(SettingKeyConstants.ServiceBusConfigurationKey)
            .Bind(azureServiceBusConfiguration);

            return(healthChecksBuilder.Add(new HealthCheckRegistration(
                                               nameof(AzureServiceBusRulesHealthCheck),
                                               sp => new AzureServiceBusRulesHealthCheck(azureServiceBusConfiguration),
                                               HealthStatus.Unhealthy,
                                               Enumerable.Empty <string>())));
        }
コード例 #13
0
        public AzureServiceBusRegistry(AzureServiceBusConfiguration configuration)
        {
            var topicNameFormatterType = Type.GetType(configuration.TopicNameFormatter);

            if (topicNameFormatterType == null)
            {
                throw new Exception($"TopicNameFormatter {configuration.TopicNameFormatter} was not recognized as a valid class");
            }
            var topicNameFormatter = (ITopicNameFormatter)Activator.CreateInstance(topicNameFormatterType);

            For <ITopicNameFormatter>().Singleton().Use(topicNameFormatter);
            For <IServiceBusInitialiser>().Singleton().Use <AzureServiceBusInitialiser>();
            For <IServiceBus>().Singleton().Use <AzureServiceBus>();
            For <IClientFactory>().Singleton().Use <ClientFactory>();
        }
コード例 #14
0
        public static IBusConfigurator UseAzureServiceBusTransport(this IBusConfigurator busConfigurator,
                                                                   AzureServiceBusConfiguration config,
                                                                   Action <IAzureServiceBusConfigurationBuilder> builderFunc = null)
        {
            //https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-performance-improvements?tabs=net-standard-sdk-2#reusing-factories-and-clients
            busConfigurator.Services
            .AddSingleton(config)
            .AddSingleton(ctx => new ServiceBusClient(config.ConnectionString, new ServiceBusClientOptions()))
            .AddSingleton <IQueueReferenceFactory, QueueReferenceFactory>()
            .AddSingleton <IServiceBusSenderFactory, ServiceBusSenderFactory>()
            .AddSingleton <IPublisher, ServiceBusPublisher>();

            builderFunc?.Invoke(new DefaultAzureServiceBusConfigurationBuilder(busConfigurator));

            return(busConfigurator);
        }
コード例 #15
0
        public void AddEventBus(IServiceCollection serviceCollection, IConfiguration configuration)
        {
            AzureServiceBusConfiguration azureServiceBusConfiguration = new AzureServiceBusConfiguration();

            configuration
            .GetSection(SettingKeyConstants.ServiceBusConfigurationKey)
            .Bind(azureServiceBusConfiguration);

            serviceCollection.AddSingleton <IAzureServiceBusPersistentConnection>(sp =>
                                                                                  new AzureServiceBusPersistentConnection(azureServiceBusConfiguration.ConnectionString));

            serviceCollection.AddSingleton <IServiceBusClient, AzureServiceBusClient>();

            serviceCollection.Configure <AzureServiceBusSubscriptionConfiguration>(configuration.GetSection(nameof(AzureServiceBusSubscriptionConfiguration)));

            serviceCollection.AddSingleton(typeof(IServiceBusSubscriptionClient <,>), typeof(AzureServiceBusSubscriptionClient <,>));
        }
コード例 #16
0
        public async Task StartApplication()
        {
            MessageBrokerContext.SetEnvironment(Configuration.Environment);

            var azureConfiguration = new AzureServiceBusConfiguration
            {
                ConnectionString = File.ReadAllText($"{AppContext.BaseDirectory}\\ConnectionString.txt")
            };

            var logInstance = new LoggerConfiguration()
                              .MinimumLevel.Verbose()
                              .Enrich.FromLogContext()
                              .Enrich.WithProperty("Environment", "Testing")
                              .WriteTo.Seq("http://localhost:5341")
                              .CreateLogger();

            _resolver = ConfigureDependencies.Initialise()
                        .AddAzureServiceBusTransportProvider(azureConfiguration)
                        .AddCoreDependencies()
                        .ScanForHandlers(Assembly.GetExecutingAssembly())
                        .Build();

            var configurationBuilder = _resolver.GetInstance <BusConfigurationBuilder>();

            await configurationBuilder
            .SubscribeToQueue <TestQueue>()
            .SubscribeToEvent <TestEventV1>(Configuration.Subscription1)
            .SubscribeToEvent <MultipleSubscribersEventV1>(Configuration.Subscription1)
            .SubscribeToEvent <MultipleSubscribersEventV1>(Configuration.Subscription2)
            .PublishEvent <TestEventV1>()
            .PublishEvent <MultipleSubscribersEventV1>()
            .UseLogger(logInstance)
            .BuildAsync();

            _monitor = _resolver.GetInstance <IMonitor>();
            _monitor.Start();

            Bus = _resolver.GetInstance <IBus>();
        }
コード例 #17
0
        static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging();

            var asbConnection = new AzureServiceBusConfiguration("Endpoint=sb://.servicebus.windows.net/;Authentication=Managed Identity", true);

            var producer = AzureServiceBusMessageProducerFactory.Get(asbConnection);

            serviceCollection.AddBrighter(options =>
            {
                var outBox = new InMemoryOutbox();
                options.BrighterMessaging = new BrighterMessaging(outBox, producer: producer);
            }).AutoFromAssemblies();

            var serviceProvider = serviceCollection.BuildServiceProvider();

            var commandProcessor = serviceProvider.GetService <IAmACommandProcessor>();

            bool run = true;

            while (run)
            {
                Console.WriteLine("Sending....");

                commandProcessor.Post(new GreetingEvent("Paul"));
                commandProcessor.Post(new GreetingAsyncEvent("Paul - Async"));

                Console.WriteLine("Press q to Quit or any other key to continue");

                var keyPress = Console.ReadKey();
                if (keyPress.KeyChar == 'q')
                {
                    run = false;
                }
            }
        }
コード例 #18
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            //string dbConnString = "server=(localdb)\\mssqllocaldb;database=BrighterTests;trusted_connection=yes;MultipleActiveResultSets=True";
            string dbConnString = "server=(localdb)\\mssqllocaldb;database=BrighterTests;trusted_connection=yes";

            //EF
            services.AddDbContext <GreetingsDataContext>(o =>
            {
                o.UseSqlServer(dbConnString);
            });

            //Brighter
            string asbConnectionString = "Endpoint=sb://.servicebus.windows.net/;Authentication=Managed Identity";

            var asbConnection = new AzureServiceBusConfiguration(asbConnectionString, true);
            var producer      = AzureServiceBusMessageProducerFactory.Get(asbConnection);

            var outboxConfig = new MsSqlConfiguration(dbConnString, "BrighterOutbox");

            services
            .AddBrighter(opt =>
            {
                opt.PolicyRegistry           = new DefaultPolicy();
                opt.CommandProcessorLifetime = ServiceLifetime.Scoped;
            })
            .UseExternalBus(producer)
            //.UseMsSqlOutbox(outboxConfig, typeof(MsSqlOutboxSqlAuthConnectionFactory))
            .UseMsSqlOutbox(outboxConfig, typeof(MsSqlEntityFrameworkCoreConnectionProvider <GreetingsDataContext>), ServiceLifetime.Scoped)
            .MapperRegistry(r =>
            {
                r.Add(typeof(GreetingEvent), typeof(GreetingEventMessageMapper));
                r.Add(typeof(GreetingAsyncEvent), typeof(GreetingEventAsyncMessageMapper));
            });


            services.AddControllersWithViews();
        }
コード例 #19
0
        static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(builder => { builder.AddUserSecrets <Program>(); })
        .ConfigureServices((hostContext, services) =>
        {
            services.AddLogging(cfg => { cfg.AddConsole(); })
            .AddOpenSleigh(cfg =>
            {
                var connStr = hostContext.Configuration.GetConnectionString("AzureServiceBus");
                if (string.IsNullOrWhiteSpace(connStr))
                {
                    throw new ArgumentNullException(
                        "please provide a valid Azure Service Bus connection string");
                }

                var azureSBCfg = new AzureServiceBusConfiguration(connStr);
                cfg.UseAzureServiceBusTransport(azureSBCfg)
                .UseInMemoryPersistence();

                cfg.AddSaga <MySaga, MySagaState>()
                .UseStateFactory <StartSaga>(msg => new MySagaState(msg.CorrelationId))
                .UseAzureServiceBusTransport();
            });
        });
コード例 #20
0
 public TopicClientProvider(AzureServiceBusConfiguration configuration)
 {
     _connectionString = configuration.ConnectionString;
 }
コード例 #21
0
 public MessageReceiverProvider(AzureServiceBusConfiguration configuration)
 {
     _connectionString = configuration.ConnectionString;
 }
 public AzureServiceBusRulesHealthCheck(AzureServiceBusConfiguration rulesConfiguration)
 {
     _rulesConfiguration =
         Guard.Argument(rulesConfiguration, nameof(rulesConfiguration)).NotNull();
 }
コード例 #23
0
        public static IServiceCollection AddMassTransitBus(this IServiceCollection serviceCollection, AzureServiceBusConfiguration config)
        {
            serviceCollection.AddMassTransit(
                provider => Bus.Factory.CreateUsingAzureServiceBus(cfg =>
            {
                cfg.Host(config.ConnectionString, configure => { });
            }));

            return(serviceCollection);
        }
コード例 #24
0
 public ManagementClientWrapper(AzureServiceBusConfiguration configuration)
 {
     _managementClient = new ManagementClient(configuration.ConnectionString);
 }
        public void MaxConcurrentRequests_LessThenMinConcurrent_Throws(int maxConcurrentRequest)
        {
            // Arrange
            // Act
            var config = new AzureServiceBusConfiguration();

            // Assert
            Assert.Throws<ArgumentOutOfRangeException>(() => config.MaxConcurrentRequests = maxConcurrentRequest);
        }
コード例 #26
0
 public ManagementClientWrapper(AzureServiceBusConfiguration configuration)
 {
     _configuration = configuration;
     Initialise();
 }
コード例 #27
0
 public MessageBusBuilder(AzureServiceBusConfiguration configuration, IAuthContext authContext)
 {
     _configuration = configuration;
     _authContext   = authContext;
     CreateServiceBus().Wait();
 }
コード例 #28
0
 public AzureServiceBus(ILoggerFactory loggerFactory, IConfigService configService)
 {
     this.logger = loggerFactory.CreateLogger(this.GetType().Name);
     this.config = configService.Get <AzureServiceBusConfiguration>("AzureServiceBusConfiguration");
 }
コード例 #29
0
 public AzureServiceBusManagement(AzureServiceBusConfiguration configuration)
 {
     this.configuration = configuration;
 }
        private static AzureServiceBusHttpServer CreateServer()
        {
            var config = new AzureServiceBusConfiguration();
            config.Routes.MapHttpRoute("Default", "{controller}/{action}");

            var server = new AzureServiceBusHttpServer(config);
            server.OpenAsync().Wait();
            return server;
        }