public async Task Should_startup_and_shut_down_cleanly()
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());

            var busControl = Bus.Factory.CreateUsingRabbitMq();

            BusHandle handle;

            using (var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(30)))
            {
                handle = await busControl.StartAsync(timeout.Token);
            }

            try
            {
                await handle.Ready;
            }
            finally
            {
                await handle.StopAsync(CancellationToken.None);
            }
        }
        public async Task Should_fault_nicely()
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());

            var busControl = Bus.Factory.CreateUsingRabbitMq(x =>
            {
                x.Host(new Uri("rabbitmq://unknownhost:32787"), h =>
                {
                    h.Username("whocares");
                    h.Password("Ohcrud");
                    h.RequestedConnectionTimeout(2000);
                });

                x.AutoStart = true;
            });

            Assert.ThrowsAsync <RabbitMqConnectionException>(async() =>
            {
                BusHandle handle;
                using (var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
                {
                    handle = await busControl.StartAsync(timeout.Token);
                }

                await handle.StopAsync(CancellationToken.None);
            });
        }
        public static IServiceCollection AddHiveMassTransit(this IServiceCollection services,
                                                            Action <IServiceCollectionBusConfigurator>?serviceCollectionBusConfigure = null,
                                                            Action <IRegistration, IRabbitMqBusFactoryConfigurator>?configure        = null)
        {
            _ = services.AddMassTransit(bus =>
            {
                serviceCollectionBusConfigure?.Invoke(bus);

                bus.UsingRabbitMq((context, cfg) =>
                {
                    LogContext.ConfigureCurrentLogContext(context.GetService <ILoggerFactory>());

                    var rabbitMqOptions = context.GetService <IOptions <RabbitMqOptions> >()?.Value ?? new RabbitMqOptions();
                    cfg.Host(new Uri(rabbitMqOptions.Url), r =>
                    {
                        r.Username(rabbitMqOptions.Username);
                        r.Password(rabbitMqOptions.Password);
                        r.Heartbeat(rabbitMqOptions.Heartbeat);
                    });

                    configure?.Invoke(context, cfg);
                });
            });

            _ = services.AddMassTransitHostedService();

            return(services);
        }
Exemple #4
0
        public async Task TransportTestSetUp()
        {
            Harness = await _harnessFactory.CreateTestHarness();

            if (_enableLog)
            {
                Harness.OnConfigureBus += cfg =>
                {
                    LogContext.ConfigureCurrentLogContext(LoggerFactory);

                    LoggerFactory.Current = default;
                };
            }

            await Harness.Clean();

            await Arrange();

            _fixtureContext = TestExecutionContext.CurrentContext;

            LoggerFactory.Current = _fixtureContext;


            await StartTestHarness();

            await Task.Delay(200);
        }
Exemple #5
0
        static async Task Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                         .Enrich.FromLogContext()
                         .WriteTo.Console()
                         .CreateLogger();

            var provider = ConfigureServiceProvider();

            LogContext.ConfigureCurrentLogContext(provider.GetRequiredService <ILoggerFactory>());

            var bus = provider.GetRequiredService <IBusControl>();

            try
            {
                await bus.StartAsync();

                await bus.Send <DoWork>(new { });

                Console.ReadKey();
            }
            finally
            {
                await bus.StopAsync();
            }
        }
        public async Task Should_fault_nicely()
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());

            IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(x =>
            {
                x.Host(new Uri("rabbitmq://unknownhost:32787"), h =>
                {
                    h.Username("whocares");
                    h.Password("Ohcrud");
                    h.RequestedConnectionTimeout(2000);
                });

                x.AutoStart = false;
            });

            Assert.That(async() =>
            {
                BusHandle handle = await busControl.StartAsync(new CancellationTokenSource(20000).Token);
                try
                {
                    TestContext.Out.WriteLine("Waiting for connection...");

                    await handle.Ready;
                }
                finally
                {
                    await handle.StopAsync();
                }
            }, Throws.TypeOf <RabbitMqConnectionException>());
        }
Exemple #7
0
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) =>
        {
            services.AddHostedService <Test>();
            services.AddHostedService <BusService>();
            services.AddSingleton <IEntityManager, LocalEntityManager>();
            services.AddSingleton <IEntityResolver, EntityResolver>();
            services.AddScoped <IEntityMetadataSerializer, EntityMetadataSerializer>();

            services.AddMassTransit((configurator =>
            {
                MassTransitSetup.Setup();
                configurator.SetKebabCaseEndpointNameFormatter();
                configurator.AddConsumersFromNamespaceContaining <Program>();
                configurator.AddInMemoryBus(((provider, factoryConfigurator) =>
                {
                    LogContext.ConfigureCurrentLogContext(provider.GetRequiredService <ILoggerFactory>());
                    factoryConfigurator.ConfigureEndpoints(provider);
                }));

                configurator.AddRequestClient <GetEntityMetadataRequest>();
                configurator.AddRequestClient <CreateEntityRequest>();
                configurator.AddRequestClient <GetEntityTransformRequest>();
            }));
        });
Exemple #8
0
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            // setup mass transit to log to nlog
            LogContext.ConfigureCurrentLogContext(new NLogLoggerFactory());

            container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel, true));

            container.AddMassTransit(x =>
            {
                x.UsingRabbitMq((context, cfg) =>
                {
                    cfg.Host(
                        "rabbitmq://" + _rabbitHost,
                        x =>
                    {
                        x.Username(_rabbitUser);
                        x.Password(_rabbitPassword);
                    }
                        );
                    cfg.UseSendFilter(typeof(ValidatingSendFilter <>), context);
                });
            });

            container.Register(
                Component.For <IReadOnlyCollection <IValidator> >().UsingFactoryMethod(kernel => kernel.ResolveAll <IValidator>().ToArray()).LifestyleSingleton()
                );

            // to recieve messages we have to start bus (this includes receiving responses).
            container.Resolve <IBusControl>().Start();
        }
        public static void AddMassTransitBus(this IServiceCollection services, RabbitMqSettings rabbitMqSettings,
                                             Action <IRabbitMqBusFactoryConfigurator, IRabbitMqHost> registrationAction = null)
        {
            var serviceProvider = services.BuildServiceProvider();

            // Handle Logging
            var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>();

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            // Configure Bus
            var bus = ConfigureBus(rabbitMqSettings, registrationAction);

            // Register Interfaces
            services.AddSingleton <IPublishEndpoint>(bus);
            services.AddSingleton <ISendEndpointProvider>(bus);
            services.AddSingleton <IBus>(bus);
            services.AddSingleton <IBusControl>(bus);

            try
            {
                bus.Start();
            }
            catch (Exception ex)
            {
                var logger = loggerFactory.CreateLogger(nameof(AddMassTransitBus));
                logger?.LogError($"Bus could not started. Error: {ex.Message}, StackTrace: {ex.StackTrace}");
            }
        }
        public async Task Should_not_be_allowed_twice()
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());

            var secondHarness = new RabbitMqTestHarness();

            try
            {
                Assert.That(async() =>
                {
                    using (var token = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
                    {
                        await secondHarness.Start(token.Token).OrCanceled(TestCancellationToken);

                        await secondHarness.Stop();
                    }
                }, Throws.TypeOf <RabbitMqConnectionException>());
            }
            finally
            {
                secondHarness.Dispose();
            }
        }
Exemple #11
0
        protected IBusInstance CreateBus <T, TConfigurator>(T configurator, IBusRegistrationContext context,
                                                            Action <IBusRegistrationContext, TConfigurator> configure, IEnumerable <IBusInstanceSpecification> specifications)
            where T : TConfigurator, IBusFactory
            where TConfigurator : IBusFactoryConfigurator
        {
            var loggerFactory = context.GetService <ILoggerFactory>();

            if (loggerFactory != null)
            {
                LogContext.ConfigureCurrentLogContext(loggerFactory);
            }

            context.UseHealthCheck(configurator);

            var riders = new RiderConnectable();

            configurator.ConnectBusObserver(new RiderBusObserver(riders));

            configure?.Invoke(context, configurator);

            specifications ??= Enumerable.Empty <IBusInstanceSpecification>();

            var busControl = configurator.Build(specifications);

            var instance = new TransportBusInstance(busControl, _hostConfiguration, riders);

            foreach (var specification in specifications)
            {
                specification.Configure(instance);
            }

            return(instance);
        }
Exemple #12
0
        void ConfigureLogging()
        {
            var loggerFactory = Provider.GetRequiredService <ILoggerFactory>();

            LogContext.ConfigureCurrentLogContext(loggerFactory);
            Quartz.Logging.LogContext.SetCurrentLogProvider(loggerFactory);
        }
Exemple #13
0
        protected void ConfigureLogging(ILogger logger)
        {
            var loggerFactory = new TestOutputLoggerFactory(true, logger);

            LogContext.ConfigureCurrentLogContext(loggerFactory);
            Quartz.Logging.LogContext.SetCurrentLogProvider(loggerFactory);
        }
        public static IApplicationBuilder UseCustomMassTransit(this IApplicationBuilder app)
        {
            var loggerFactory = app.ApplicationServices.GetService <LoggerFactory>();

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            return(app);
        }
        protected virtual void ConfigureLogging(ILoggerFactory loggerFactory)
        {
            // masstransit의 logging이 test용 logger factory 를 사용하도록 지정.
            LogContext.ConfigureCurrentLogContext(loggerFactory);

            // Quartz 의 logging이  test용 logger factory 를 사용하도록 지정.
            Quartz.Logging.LogContext.SetCurrentLogProvider(loggerFactory);
        }
Exemple #16
0
        protected override void Register(ContainerBuilder builder)
        {
            builder.RegisterMetadataRegistrationSources();
            builder.RegisterModule <Cogito.Autofac.AssemblyModule>();
            builder.RegisterFromAttributes(typeof(AssemblyModule).Assembly);

            // setup global logging
            builder.RegisterBuildCallback(i => LogContext.ConfigureCurrentLogContext(i.Resolve <Microsoft.Extensions.Logging.ILoggerFactory>()));

            // standard Autofac related services
            builder.RegisterType <BusDepot>().As <IBusDepot>().SingleInstance();
            builder.Register(CreateConsumerScopeProvider).As <IConsumerScopeProvider>().SingleInstance().IfNotRegistered(typeof(IConsumerScopeProvider));
            builder.Register(GetCurrentSendEndpointProvider).As <ISendEndpointProvider>().InstancePerLifetimeScope();
            builder.Register(GetCurrentPublishEndpoint).As <IPublishEndpoint>().InstancePerLifetimeScope();
            builder.Register(context => new AutofacConfigurationServiceProvider(context.Resolve <ILifetimeScope>())).As <IConfigurationServiceProvider>().SingleInstance().IfNotRegistered(typeof(IConfigurationServiceProvider));

            // consumer related services
            builder.RegisterType <ConsumerDefinitionProvider>().SingleInstance();
            builder.RegisterType <ConsumerDefinitionReceiveEndpointConfigurationSource>().As <IReceiveEndpointConfigurationSource>().SingleInstance();
            builder.RegisterType <ConsumerDefinitionNameSource>().As <IBusNameSource>().As <IReceiveEndpointNameSource>().SingleInstance();
            builder.RegisterType <ContainerConsumerDefinitionSource>().As <IConsumerDefinitionSource>().SingleInstance();

            // saga related services
            builder.RegisterType <SagaDefinitionProvider>().SingleInstance();
            builder.RegisterType <SagaDefinitionReceiveEndpointConfigurationSource>().As <IReceiveEndpointConfigurationSource>().SingleInstance();
            builder.RegisterType <SagaDefinitionNameSource>().As <IBusNameSource>().As <IReceiveEndpointNameSource>().SingleInstance();
            builder.RegisterType <ContainerSagaDefinitionSource>().As <ISagaDefinitionSource>().SingleInstance();

            // saga state machine related services
            builder.RegisterType <SagaStateMachineDefinitionProvider>().SingleInstance();
            builder.RegisterType <SagaStateMachineDefinitionReceiveEndpointConfigurationSource>().As <IReceiveEndpointConfigurationSource>().SingleInstance();
            builder.RegisterType <SagaStateMachineDefinitionNameSource>().As <IBusNameSource>().As <IReceiveEndpointNameSource>().SingleInstance();
            builder.RegisterType <ContainerSagaStateMachineDefinitionSource>().As <ISagaStateMachineDefinitionSource>().SingleInstance();

            // bus related services
            builder.RegisterType <ContainerBusConfigurationSource>().As <IBusConfigurationSource>().SingleInstance();
            builder.RegisterType <ContainerBusObserverConfiguration>().As <IBusConfiguration>().SingleInstance();
            builder.RegisterType <ContainerBusReceiveEndpointConfiguration>().As <IBusConfiguration>().SingleInstance();
            builder.RegisterType <ContainerBusDefinitionSource>().As <IBusDefinitionSource>().SingleInstance();

            // providers
            builder.RegisterType <BusDefinitionNameSource>().As <IBusNameSource>().SingleInstance();
            builder.RegisterType <BusDefinitionProvider>().SingleInstance();
            builder.RegisterType <BusNameProvider>().SingleInstance();
            builder.RegisterType <BusConfigurationProvider>().SingleInstance();
            builder.RegisterType <ReceiveEndpointNameProvider>().SingleInstance();
            builder.RegisterType <ReceiveEndpointConfigurationProvider>().SingleInstance();
            builder.RegisterType <BusRegistrationFactory>().SingleInstance();
            builder.RegisterType <BusProvider>().SingleInstance();

            // generates request clients
            builder.RegisterGenericRequestClient();

            // register default bus instance
            builder.Register(ctx => ctx.Resolve <BusProvider>().GetBus()).SingleInstance().ExternallyOwned().As <IBusControl>().As <IBus>();
            builder.Register(ctx => ctx.Resolve <IBus>().CreateClientFactory()).SingleInstance();
        }
Exemple #17
0
        protected virtual void ConfigureMediator(IMediatorConfigurator mediatorConfigurator)
        {
            if (_enableLog)
            {
                LogContext.ConfigureCurrentLogContext(LoggerFactory);
            }

            LoggerFactory.Current = default;
        }
        protected IBusInstance CreateBus <T, TConfigurator>(T configurator, IBusRegistrationContext context,
                                                            Action <IBusRegistrationContext, TConfigurator> configure, IEnumerable <IBusInstanceSpecification> specifications)
            where T : TConfigurator, IBusFactory
            where TConfigurator : IBusFactoryConfigurator
        {
            var loggerFactory = context.GetService <ILoggerFactory>();

            if (loggerFactory != null)
            {
                LogContext.ConfigureCurrentLogContext(loggerFactory);
            }
            else if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }

            _hostConfiguration.LogContext = LogContext.Current;

            context.UseHealthCheck(configurator);

            configure?.Invoke(context, configurator);

            specifications ??= Enumerable.Empty <IBusInstanceSpecification>();

            IEnumerable <IBusInstanceSpecification> busInstanceSpecifications = specifications as IBusInstanceSpecification[] ?? specifications.ToArray();

            IEnumerable <ValidationResult> validationResult = configurator.Validate()
                                                              .Concat(busInstanceSpecifications.SelectMany(x => x.Validate()));

            var result = BusConfigurationResult.CompileResults(validationResult);

            try
            {
                var busReceiveEndpointConfiguration = configurator.CreateBusEndpointConfiguration(x => x.ConfigureConsumeTopology = false);

                var host = _hostConfiguration.Build() as IHost <TEndpointConfigurator>;

                var bus = new MassTransitBus(host, _hostConfiguration.BusConfiguration.BusObservers, busReceiveEndpointConfiguration);

                TaskUtil.Await(() => _hostConfiguration.BusConfiguration.BusObservers.PostCreate(bus));

                IBusInstance instance = CreateBusInstance(bus, host, _hostConfiguration, context);

                foreach (var specification in busInstanceSpecifications)
                {
                    specification.Configure(instance);
                }

                return(instance);
            }
            catch (Exception ex)
            {
                TaskUtil.Await(() => _hostConfiguration.BusConfiguration.BusObservers.CreateFaulted(ex));

                throw new ConfigurationException(result, "An exception occurred during bus creation", ex);
            }
        }
Exemple #19
0
#pragma warning disable IDE0060 // Supprimer le paramètre inutilisé
        private static void ConfigureLogging(IConfiguration configuration, LoggerConfiguration loggerConfiguration)
        {
            loggerConfiguration.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss.fff} {SourceContext}]{NewLine}[{Level}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}")
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", Serilog.Events.LogEventLevel.Error);
            Serilog.Debugging.SelfLog.Enable(Console.Error);
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            LogContext.ConfigureCurrentLogContext();
        }
        protected static void ConfigureLogContext(IConfigurationServiceProvider provider)
        {
            var loggerFactory = provider.GetService <ILoggerFactory>();

            if (loggerFactory != null)
            {
                LogContext.ConfigureCurrentLogContext(loggerFactory);
            }
        }
Exemple #21
0
        public static void SetupMassTransitLogger()
        {
            Log.Logger = new LoggerConfiguration()
                         .Enrich.FromLogContext()
                         .MinimumLevel.Information()
                         .WriteTo.Console()
                         .CreateLogger();

            LogContext.ConfigureCurrentLogContext(new SerilogLoggerFactory());
        }
        protected ReceiverConfiguration(IEndpointConfiguration endpointConfiguration)
            : base(endpointConfiguration)
        {
            Specifications = new List <IReceiveEndpointSpecification>();

            if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }
        }
Exemple #23
0
        public static void Main(string[] args)
        {
            var logger = LoggingConfiguration.ConfigureLogger("PricingProxy");

            LogContext.ConfigureCurrentLogContext(new SerilogLoggerFactory(logger));

            var bus = ConfigureBus();

            bus.Start();
            CreateWebHostBuilder(args).Build().Run();
        }
        protected BusFactoryConfigurator(IBusConfiguration busConfiguration)
        {
            _busConfiguration = busConfiguration;

            busConfiguration.BusEndpointConfiguration.Consume.Configurator.AutoStart = false;

            if (LogContext.Current == null)
            {
                LogContext.ConfigureCurrentLogContext();
            }
        }
        public override IMessageBus GetBusInstance()
        {
            LogContext.ConfigureCurrentLogContext(LoggerFactory);
            Logger.LogInformation("MessageBus:Use {TransportType} Transport", Options.Transport);
            IBusControl busControl = BuildBusControl();

            busControl.Start();
            Logger.LogInformation($"MessageBus:Started");

            return(new MassTransitMessageBus(busControl, Options));
        }
        public static async Task Main()
        {
            var config = new MTASBSettings
            {
                MaxConcurrentCalls    = 100,
                Endpoint              = "sb://endpoint.servicebus.windows.net",
                KeyName               = "RootManageSharedAccessKey",
                SharedAccessSignature = "setme",
                PublishInterval       = 5000
            };

            var loggerFactory = new ServiceCollection()
                                .AddLogging(loggingOptions => loggingOptions.AddConsole().SetMinimumLevel(LogLevel.Trace).AddFile(@"C:\logs\repro.mt.{Date}.log", minimumLevel: LogLevel.Trace))
                                .BuildServiceProvider()
                                .GetRequiredService <ILoggerFactory>();

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            var busControl = Bus.Factory.CreateUsingAzureServiceBus(busConfigurator =>
            {
                busConfigurator.Host(config.Endpoint, hostConfig =>
                {
                    hostConfig.SharedAccessSignature(sasConfig =>
                    {
                        sasConfig.KeyName         = config.KeyName;
                        sasConfig.SharedAccessKey = config.SharedAccessSignature;
                        sasConfig.TokenTimeToLive = TimeSpan.FromDays(1);
                    });
                });

                busConfigurator.ReceiveEndpoint("repro.project.mass.transit.queue", ep =>
                {
                    ep.MaxConcurrentCalls = config.MaxConcurrentCalls;
                    ep.LockDuration       = TimeSpan.FromMinutes(1);
                    ep.Consumer <Consumer>(() => new Consumer(loggerFactory.CreateLogger <Consumer>()));
                });
            });

            await busControl.StartAsync();

            var publisher = new Publisher(busControl, loggerFactory.CreateLogger <Publisher>());

            var timer = new System.Timers.Timer(config.PublishInterval);

            timer.Elapsed += publisher.Publish;

            timer.Start();

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();

            timer.Stop();
            await busControl.StopAsync();
        }
Exemple #27
0
        void ConfigureBus(IBusFactoryConfigurator configurator)
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            if (Interlocked.CompareExchange(ref _subscribedObserver, 1, 0) == 0)
            {
                DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());
            }
        }
        public MediatorConfiguration(IHostConfiguration hostConfiguration, IReceiveEndpointConfiguration endpointConfiguration)
            : base(hostConfiguration, endpointConfiguration)
        {
            _hostConfiguration = hostConfiguration;

            if (_hostConfiguration.LogContext == null)
            {
                LogContext.ConfigureCurrentLogContext();

                _hostConfiguration.LogContext = LogContext.Current;
            }
        }
Exemple #29
0
        public static void ConfigureBusDiagnostics(IBusFactoryConfigurator configurator)
        {
            LogContext.ConfigureCurrentLogContext(LoggerFactory);

            if (_enableDiagnostics)
            {
                if (Interlocked.CompareExchange(ref _subscribedObserver, 1, 0) == 0)
                {
                    DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());
                }
            }
        }
Exemple #30
0
        protected void ConfigureRegistration(IMediatorRegistrationConfigurator configurator)
        {
            configurator.AddConsumer <PingConsumer>();

            configurator.AddRequestClient <Ping>();

            configurator.ConfigureMediator((context, cfg) =>
            {
                LogContext.ConfigureCurrentLogContext(LoggerFactory);
                ConfigureFilters(context, cfg);
            });
        }