예제 #1
0
        private async Task AssertMessagePublishedAndReceivedAsync <T>(
            IServiceCollection services,
            IHandlerAsync <T> handler,
            TaskCompletionSource <object> completionSource)
            where T : Message
        {
            IServiceProvider serviceProvider = services.BuildServiceProvider();

            IMessagePublisher publisher = serviceProvider.GetRequiredService <IMessagePublisher>();
            IMessagingBus     listener  = serviceProvider.GetRequiredService <IMessagingBus>();

            using (var source = new CancellationTokenSource(Timeout))
            {
                listener.Start(source.Token);

                var message = new SimpleMessage();

                // Act
                await publisher.PublishAsync(message, source.Token);

                // Assert
                completionSource.Task.Wait(source.Token);

                await handler.Received(1).Handle(Arg.Any <T>());
            }
        }
예제 #2
0
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogInformation("Kitchen subscriber running");

            _bus.Start(stoppingToken);

            return(Task.CompletedTask);
        }
예제 #3
0
        public async Task Can_Create_Messaging_Bus_Fluently_For_A_Queue()
        {
            // Arrange
            var completionSource = new TaskCompletionSource <object>();
            var handler          = Substitute.For <IHandlerAsync <SimpleMessage> >();

            handler.Handle(Arg.Any <SimpleMessage>())
            .Returns(true)
            .AndDoes((_) => completionSource.SetResult(null));

            var container = new Container(
                (registry) =>
            {
                registry.For <ILoggerFactory>()
                .Use(() => OutputHelper.ToLoggerFactory())
                .Singleton();

                registry.For <IHandlerAsync <SimpleMessage> >()
                .Use(handler);

                registry.AddJustSaying(
                    (builder) =>
                {
                    builder.Client((options) => options.WithBasicCredentials("accessKey", "secretKey").WithServiceUri(TestEnvironment.SimulatorUrl))
                    .Messaging((options) => options.WithRegions("eu-west-1"))
                    .Publications((options) => options.WithQueue <SimpleMessage>())
                    .Subscriptions((options) => options.ForQueue <SimpleMessage>());
                });
            });

            IMessagePublisher publisher = container.GetInstance <IMessagePublisher>();
            IMessagingBus     listener  = container.GetInstance <IMessagingBus>();

            var message = new SimpleMessage();

            using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(20)))
            {
                listener.Start(source.Token);

                // Act
                await publisher.PublishAsync(message, source.Token);

                completionSource.Task.Wait(source.Token);

                // Assert
                await handler.Received().Handle(Arg.Any <SimpleMessage>());
            }
        }
예제 #4
0
        public void Can_Create_Messaging_Bus()
        {
            // Arrange
            var services = new ServiceCollection()
                           .AddLogging((p) => p.AddXUnit(OutputHelper))
                           .AddJustSaying("eu-west-1")
                           .AddJustSayingHandler <QueueMessage, QueueHandler>();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            IMessagePublisher publisher = serviceProvider.GetRequiredService <IMessagePublisher>();
            IMessagingBus     listener  = serviceProvider.GetRequiredService <IMessagingBus>();

            using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(20)))
            {
                // Act
                listener.Start(source.Token);
            }
        }
예제 #5
0
        public async Task Can_Create_Messaging_Bus_Fluently_For_A_Queue()
        {
            // Arrange
            var services = new ServiceCollection()
                           .AddLogging((p) => p.AddXUnit(OutputHelper))
                           .AddJustSaying(
                (builder) =>
            {
                builder.Client((options) => options.WithBasicCredentials("accessKey", "secretKey").WithServiceUri(TestEnvironment.SimulatorUrl))
                .Messaging((options) => options.WithRegions("eu-west-1"))
                .Publications((options) => options.WithQueue <QueueMessage>())
                .Subscriptions((options) => options.ForQueue <QueueMessage>())
                .Services((options) => options.WithMessageMonitoring(() => new MyMonitor()));
            })
                           .AddJustSayingHandler <QueueMessage, QueueHandler>();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            IMessagePublisher publisher = serviceProvider.GetRequiredService <IMessagePublisher>();
            IMessagingBus     listener  = serviceProvider.GetRequiredService <IMessagingBus>();

            using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(20)))
            {
                // Act
                listener.Start(source.Token);

                var message = new QueueMessage();

                await publisher.PublishAsync(message, source.Token);

                // Assert
                while (!source.IsCancellationRequested && !QueueHandler.MessageIds.Contains(message.Id))
                {
                    await Task.Delay(TimeSpan.FromSeconds(0.2), source.Token);
                }

                QueueHandler.MessageIds.ShouldContain(message.Id);
            }
        }
예제 #6
0
        public async Task Can_Create_Messaging_Bus_With_Contributors()
        {
            // Arrange
            var services = new ServiceCollection()
                           .AddLogging((p) => p.AddXUnit(OutputHelper))
                           .AddJustSaying()
                           .AddSingleton <IMessageBusConfigurationContributor, AwsContributor>()
                           .AddSingleton <IMessageBusConfigurationContributor, MessagingContributor>()
                           .AddSingleton <IMessageBusConfigurationContributor, QueueContributor>()
                           .AddSingleton <IMessageBusConfigurationContributor, RegionContributor>()
                           .AddJustSayingHandler <QueueMessage, QueueHandler>()
                           .AddSingleton <MyMonitor>();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            IMessagePublisher publisher = serviceProvider.GetRequiredService <IMessagePublisher>();
            IMessagingBus     listener  = serviceProvider.GetRequiredService <IMessagingBus>();

            using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(20)))
            {
                // Act
                listener.Start(source.Token);

                var message = new QueueMessage();

                await publisher.PublishAsync(message, source.Token);

                // Assert
                while (!source.IsCancellationRequested && !QueueHandler.MessageIds.Contains(message.Id))
                {
                    await Task.Delay(TimeSpan.FromSeconds(0.2), source.Token);
                }

                QueueHandler.MessageIds.ShouldContain(message.Id);
            }
        }