コード例 #1
0
        public void Published_event_gets_handled()
        {
            RollbackHandlerRegistry.ImplProvider = new TestImplProv();

            var sem = new SemaphoreSlim(0, 1);
            var bus = new RabbitMqEventBus(new RabbitMqSettings()
            {
                ConnectionString = TestContextUtils.GetParameterOrDefault("rabbitmq-connection-string", "host=localhost"),
            }, Mock.Of <ILogger <RabbitMqEventBus> >());

            var toPublish = new TestAppEvent(new CorrelationId("111"), new TestEvent());

            var handler = new TestHandler(new AppEventRabbitMQBuilder(), (ev) =>
            {
                ev.Should().BeEquivalentTo(toPublish);
                sem.Release();
            });


            var stubImplProvider = new Mock <IImplProvider>();

            stubImplProvider.Setup(provider => provider.Get(typeof(TestHandler)))
            .Returns(handler);
            bus.InitSubscribers("Test.IntegrationTests", stubImplProvider.Object);

            bus.Publish(toPublish);

            if (!sem.Wait(TimeSpan.FromSeconds(60)))
            {
                Assert.Fail();
            }
        }
コード例 #2
0
        private void InitRabbitMQ()
        {
            var loggerMock = new Mock <ILogger <RabbitMqEventBus> >();

            ServiceProviderMock = new Mock <IServiceProvider>();
            var connectionFactoryMock = new Mock <IConnectionFactory>();

            ExchangeResolverMock = new Mock <IExchangeResolver>();

            connectionFactoryMock.Setup(x => x.CreateConnection()).Returns(new Mock <IConnection>().Object);

            RabbitMq = new RabbitMqEventBus(loggerMock.Object, ServiceProviderMock.Object, connectionFactoryMock.Object, ExchangeResolverMock.Object);
        }
コード例 #3
0
        public void SetupEventBus(
            params IEventConsumer[] eventHandlers)
        {
            var rabbitMqConnectionString =
                TestContextUtils.GetParameterOrDefault("rabbitmq-connection-string", "host=localhost");

            _rabbitMqEventBus = new RabbitMqEventBus(new RabbitMqSettings()
            {
                ConnectionString = rabbitMqConnectionString
            }, Mock.Of <ILogger <RabbitMqEventBus> >());
            _rabbitMqEventBus.InitSubscribers(eventHandlers.Select(h => new RabbitMqEventConsumerFactory(() => h, h.MessageType.Name)).ToArray());
            EventBus = new EventBusService(_rabbitMqEventBus, AppEventBuilder);
        }
コード例 #4
0
        public RabbitMqEventBusShould()
        {
            _subscriber = GetService <TestAllWorksOnRabbitMqEventsPublished>();

            _bus      = GetService <RabbitMqEventBus>();
            _consumer = GetService <RabbitMqDomainEventsConsumer>();
            var config = GetService <RabbitMqConfig>();

            var channel = config.Channel();

            var fakeSubscriber = FakeSubscriber();

            CleanEnvironment(channel, fakeSubscriber);
            channel.ExchangeDeclare(TestDomainEvents, ExchangeType.Topic);
            CreateQueue(channel, fakeSubscriber);

            _consumer.WithSubscribersInformation(fakeSubscriber);
        }
コード例 #5
0
        public void RollbackHandler_gets_called_once()
        {
            int called          = 0;
            var sem             = new SemaphoreSlim(0, 1);
            var toPublish       = new TestAppEvent(new CorrelationId("123"), new TestEvent(), new TestCommandBase());
            var rollbackHandler = new TestCommandRollbackHandler(new Action <IAppEvent <Event> >(ev =>
            {
                called++;
                Assert.IsTrue(CheckRollbackAppEvent(ev));
                sem.Release();
            }));

            rollbackHandler.Throws = true;

            RollbackHandlerRegistry.ImplProvider = new TestImplProv();
            RollbackHandlerRegistry.RegisterCommandRollbackHandler(nameof(TestCommandBase), provider => rollbackHandler);

            var bus = new RabbitMqEventBus(new RabbitMqSettings()
            {
                ConnectionString = TestContextUtils.GetParameterOrDefault("rabbitmq-connection-string", "host=localhost"),
            }, Mock.Of <ILogger <RabbitMqEventBus> >());

            var handler = new TestHandler(new AppEventRabbitMQBuilder(), null);

            handler.Throws = true;

            bus.InitSubscribers(new[]
            {
                new RabbitMqEventConsumerFactory(() => handler, "test"),
            });

            bus.Publish(toPublish);

            if (!sem.Wait(TimeSpan.FromSeconds(60)))
            {
                Assert.Fail();
            }
            ;
            Thread.Sleep(10);

            called.Should()
            .Be(1);
        }
コード例 #6
0
        static void  Main(string[] args)
        {
            var environmentName = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile($"appsettings.json", true, true)
                          .AddJsonFile($"appsettings.{environmentName}.json", true, true)
                          .AddEnvironmentVariables();
            var configuration           = builder.Build();
            var connectionStringSection = configuration.GetSection("connectionString");
            var unitOfWorkConnection    = connectionStringSection.Get <MySqlConnection>();



            var unitOfWorkFactory = new MySqlUnitOfWorkFactory(unitOfWorkConnection);
            var messageBroker     = new QueryMessageBroker(unitOfWorkFactory,
                                                           (unitOfWork, contentType) =>
                                                           new VersionService(new MySqlVersionRepository(unitOfWork, contentType)));

            messageBroker.Bind <ProductCreateQueryMessageFilter>();
            messageBroker.Bind <ClientCreateQueryMessageFilter>();
            messageBroker.Bind <AccountCreateQueryMessageFilter>();
            messageBroker.Bind <AccountUpdateQueryMessageFilter>();
            messageBroker.Bind <ClientUpdateQueryMessageFilter>();
            messageBroker.Bind <AccountActivateQueryMessageFilter>();

            var rabbitConnectionStringSection = configuration.GetSection("rabbitConnectionString");
            var rabbitMqConnectionString      = rabbitConnectionStringSection.Get <RabbitMqConnectionString>();



            var eventBus = new RabbitMqEventBus(rabbitMqConnectionString);

            eventBus.Subscribe("ProductCreated", ProductCreatedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("ClientCreated", ClientCreatedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("ClientUpdated", ClientUpdatedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("AccountCreated", AccountCreatedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("AccountBalanceChanged", AccountBalanceChangedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("AccountTransfered", AccountTransferedEventConsumer.ConsumerFactory(messageBroker));
            eventBus.Subscribe("AccountActivated", AccountActivatedEventConsumer.ConsumerFactory(messageBroker));
        }
コード例 #7
0
 public PublishEventJob(RabbitMqEventBus bus, TimerEvent @event)
 {
     _bus   = bus;
     _event = @event;
 }
コード例 #8
0
 public SubscriberHostedService(RabbitMqEventBus bus, TimerEventHandler handler)
 {
     _bus     = bus;
     _handler = handler;
 }