Beispiel #1
0
        public void SubscribeDynamic(
            [Frozen] Mock <IRabbitMQPersistentConnection> mockConnection,
            [Frozen] Mock <IModel> mockChannel,
            [Greedy] EventBusRabbitMQ sut,
            Mock <QueueDeclareOk> mockQueueDeclareOk
            )
        {
            //Arrange
            mockChannel.Setup(_ => _.QueueDeclare(
                                  It.IsAny <string>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <IDictionary <string, object> >()
                                  ))
            .Returns(mockQueueDeclareOk.Object);

            mockConnection.Setup(_ => _.CreateModel())
            .Returns(mockChannel.Object);

            //Act
            sut.SubscribeDynamic <TestDynamicIntegrationEventHandler>("eventName");

            //Assert
            mockChannel.Verify(_ => _.QueueBind(
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <IDictionary <string, object> >()
                                   ));
        }
Beispiel #2
0
        public void Dispose_ConsumerChannelIsNotNull_DisposeConsumerChannel(
            [Frozen] Mock <IRabbitMQPersistentConnection> mockConnection,
            [Frozen] Mock <IModel> mockChannel,
            [Frozen] Mock <IEventBusSubscriptionsManager> mockSubsManager,
            [Greedy] EventBusRabbitMQ sut,
            Mock <QueueDeclareOk> mockQueueDeclareOk
            )
        {
            //Arrange
            mockChannel.Setup(_ => _.QueueDeclare(
                                  It.IsAny <string>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <IDictionary <string, object> >()
                                  ))
            .Returns(mockQueueDeclareOk.Object);

            mockConnection.Setup(_ => _.CreateModel())
            .Returns(mockChannel.Object);

            //Act
            sut.Subscribe <TestIntegrationEvent, TestIntegrationEventHandler>();
            sut.Dispose();

            //Assert
            mockChannel.Verify(_ => _.Dispose());

            mockSubsManager.Verify(
                _ => _.Clear()
                );
        }
Beispiel #3
0
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            var loggerFactory    = (ILoggerFactory) new LoggerFactory();
            var loggerConnection = loggerFactory.CreateLogger <DefaultRabbitMQPersistentConnection>();

            var factory = new ConnectionFactory()
            {
                HostName = "localhost",
                DispatchConsumersAsync = true,
                UserName = "******",
                Password = "******"
            };


            DefaultRabbitMQPersistentConnection rabbitmqConnection = new DefaultRabbitMQPersistentConnection(factory, loggerConnection, 5);

            if (!rabbitmqConnection.IsConnected)
            {
                rabbitmqConnection.TryConnect();
            }

            var logger = loggerFactory.CreateLogger <EventBusRabbitMQ>();

            //DI
            var builder = new ContainerBuilder();

            builder.RegisterType <DispatchAcceptEventHandler>().InstancePerLifetimeScope();

            var eventBus = new EventBusRabbitMQ(rabbitmqConnection, logger, builder.Build(), 5);

            //Subscribes
            eventBus.Subscribe <DispatchAcceptEvent, DispatchAcceptEventHandler>();
        }
Beispiel #4
0
        public NewsController(NewsContext context, IMapper mapper, EventBusRabbitMQ eventBusRabbitMQ)
        {
            _context = context;
            _mapper  = mapper;

            _eventBus = eventBusRabbitMQ;
        }
Beispiel #5
0
        public void DeveTestar()
        {
            //Given
            var settings = new RabbitMQSettings
            {
                HostName = "localhost",
                Port     = 5672,
                UserName = "******",
                Password = "******"
            };

            var logger            = new XunitLogger <EventBusRabbitMQ>();
            var loggerFactoryMock = new Mock <ILoggerFactory>();

            loggerFactoryMock.Setup(setup => setup.CreateLogger(It.IsAny <string>())).Returns(logger);

            var rabbitMQConnectionMock = new Mock <RabbitMQConnection>(loggerFactoryMock.Object, settings);

            var eventBusRabbitMQ = new EventBusRabbitMQ(loggerFactoryMock.Object, rabbitMQConnectionMock.Object);
            var teste            = new Teste
            {
                Nome = Guid.NewGuid().ToString()
            };

            //When
            eventBusRabbitMQ.Subscribe <Teste>(received: EventBusRabbitMQ_OnReceivedMessage);

            eventBusRabbitMQ.Publish(teste);

            //Then
            logger.Logs.Should().NotBeEmpty();
        }
Beispiel #6
0
        public static void AgregarSubscripcionHaciaMicroServicio()
        {
            var eventbus = new EventBusRabbitMQ("");

            //eventbus.Subscribe<ProductPriceChangedIntegrationEvent,
            //                   ProductPriceChangedIntegrationEventHandler>();

            //eventbus.Subscribe<OrderStartedIntegrationEvent,
            //                   OrderStartedIntegrationEventHandler>();
        }
Beispiel #7
0
        public void Dispose_ConsumerChannelIsNull_ClearSubscription(
            [Frozen] Mock <IEventBusSubscriptionsManager> mockSubsManager,
            [Greedy] EventBusRabbitMQ sut
            )
        {
            //Arrange

            //Act
            sut.Dispose();

            //Assert
            mockSubsManager.Verify(
                _ => _.Clear()
                );
        }
Beispiel #8
0
        public void UnsubscribeDynamic(
            [Frozen] Mock <IEventBusSubscriptionsManager> mockSubsManager,
            [Greedy] EventBusRabbitMQ sut
            )
        {
            //Arrange

            //Act
            sut.UnsubscribeDynamic <TestDynamicIntegrationEventHandler>("eventName");

            //Assert
            mockSubsManager.Verify(
                _ => _.RemoveDynamicSubscription <TestDynamicIntegrationEventHandler>(
                    It.IsAny <string>()
                    )
                );
        }
    public static MicroserviceFrameworkBuilder UseEventBusRabbitMQ(this MicroserviceFrameworkBuilder builder,
                                                                   IConfiguration configuration)
    {
        builder.RegisterEventHandlers();

        builder.Services.Configure <RabbitMQOptions>(configuration.GetSection("RabbitMQ"));
        builder.Services.AddSingleton <PersistentConnection>();
        builder.Services.AddSingleton <IEventExecutor, DefaultEventExecutor>();
        builder.Services.AddSingleton <IConnectionFactory>(provider =>
        {
            var opts = provider.GetRequiredService <IOptionsMonitor <RabbitMQOptions> >().CurrentValue;
            var connectionFactory = new ConnectionFactory
            {
                HostName = opts.HostName,
                DispatchConsumersAsync = true
            };
            if (opts.Port > 0)
            {
                connectionFactory.Port = opts.Port;
            }

            if (!string.IsNullOrWhiteSpace(opts.UserName))
            {
                connectionFactory.UserName = opts.UserName;
            }

            if (!string.IsNullOrWhiteSpace(opts.Password))
            {
                connectionFactory.Password = opts.Password;
            }

            return(connectionFactory);
        });
        builder.Services.AddSingleton <IEventBus>((services) =>
        {
            var connection    = services.GetRequiredService <PersistentConnection>();
            var eventExecutor = services.GetRequiredService <IEventExecutor>();
            var logger        = services.GetRequiredService <ILogger <EventBusRabbitMQ> >();
            var eventBus      = new EventBusRabbitMQ(services.GetRequiredService <IOptionsMonitor <RabbitMQOptions> >(),
                                                     connection, eventExecutor, logger);
            eventBus.SubscribeAllEventTypes();
            return(eventBus);
        });
        return(builder);
    }
Beispiel #10
0
        public void Unsubscribe(
            [Frozen] Mock <IEventBusSubscriptionsManager> mockSubsManager,
            [Greedy] EventBusRabbitMQ sut
            )
        {
            //Arrange

            //Act
            sut.Unsubscribe <TestIntegrationEvent, TestIntegrationEventHandler>();

            //Assert
            mockSubsManager.Verify(
                _ => _.GetEventKey <TestIntegrationEvent>()
                );

            mockSubsManager.Verify(
                _ => _.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>()
                );
        }
Beispiel #11
0
        private void InitializeModule(ILifetimeScope autofacContainer)
        {
            var emailsConfiguration = new EmailsConfiguration(Configuration["EmailsConfiguration:FromEmail"], Configuration["EmailsConfiguration:SendGridUser"], Configuration["EmailsConfiguration:SendGridKey"]);

            var httpContextAccessor      = autofacContainer.Resolve <IHttpContextAccessor>();
            var executionContextAccessor = new ExecutionContextAccessor(httpContextAccessor);

            var eventBus = new EventBusRabbitMQ(_logger, GetRabbitMQConnection(), "football-banter", "Phrases");

            PhrasesStartup.Initialize(
                Configuration["ConnectionString"],
                executionContextAccessor,
                _logger,
                emailsConfiguration,
                Configuration["Security:TextEncryptionKey"],
                null,
                eventBus
                );
        }
Beispiel #12
0
        public void SubscribeDynamic_SecondTime(
            [Frozen] Mock <IRabbitMQPersistentConnection> mockConnection,
            [Frozen] Mock <IModel> mockChannel,
            [Frozen] Mock <IEventBusSubscriptionsManager> mockSubsManager,
            [Greedy] EventBusRabbitMQ sut,
            Mock <QueueDeclareOk> mockQueueDeclareOk
            )
        {
            //Arrange
            mockChannel.Setup(_ => _.QueueDeclare(
                                  It.IsAny <string>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <IDictionary <string, object> >()
                                  ))
            .Returns(mockQueueDeclareOk.Object);

            mockConnection.Setup(_ => _.CreateModel())
            .Returns(mockChannel.Object);

            mockSubsManager.SetupSequence(_ => _.HasSubscriptionsForEvent(
                                              It.IsAny <string>())
                                          )
            .Returns(false)
            .Returns(true);

            //Act
            sut.SubscribeDynamic <TestDynamicIntegrationEventHandler>("eventName");
            sut.SubscribeDynamic <TestDynamicIntegrationEventHandler>("eventName");

            //Assert
            mockChannel.Verify(_ => _.QueueBind(
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <IDictionary <string, object> >()
                                   ), Times.Once);
        }
Beispiel #13
0
        public void Publish(
            [Frozen] Mock <IRabbitMQPersistentConnection> mockConnection,
            [Frozen] Mock <IModel> mockChannel,
            [Greedy] EventBusRabbitMQ sut,
            TestIntegrationEvent integrationEvent
            )
        {
            //Arrange
            mockConnection.Setup(_ => _.CreateModel())
            .Returns(mockChannel.Object);

            //Act
            sut.Publish(integrationEvent);

            //Assert
            mockChannel.Verify(_ => _.BasicPublish(
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <bool>(),
                                   It.IsAny <IBasicProperties>(),
                                   It.IsAny <ReadOnlyMemory <byte> >()
                                   ));
        }