コード例 #1
0
        public async Task ReceivesAndSendsMessagesHighPerformance()
        {
            var inputSubscription = nameof(ReceivesAndSendsMessagesHighPerformance);

            await CreateEndToEndTestSubscriptionsAsync(inputSubscription);

            var services = new ServiceCollection();

            services.AddHostedService <MessageBusHostedService>()
            .AddSingleton <IMessageTracker, MessageTracker>()
            .AddMessageBus(new AzureServiceBusAdminClient(Configuration["Hostname"],
                                                          Configuration["Topic"], inputSubscription, Configuration["TenantId"]),
                           CreateHighPerformanceClient(inputSubscription))
            .SubscribeToMessage <CreateNewFlightPlan, CreateNewFlightPlanHandler>()
            .SubscribeToMessage <AircraftTakenOff, AircraftTakenOffHandler>()
            .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandlerDeadLetter>();
            _serviceProvider = services.BuildServiceProvider();
            await StartMessageBusHostedServiceAsync(_serviceProvider);

            var count = 25;
            var createNewFlightPlanCommand = new CreateNewFlightPlan {
                Destination = Guid.NewGuid().ToString()
            };
            var aircraftTakenOffEvent1   = BuildAircraftTakenOffEvent();
            var aircraftTakenOffEvent2   = BuildAircraftTakenOffEvent();
            var aircraftLeftRunwayEvent1 = new AircraftLeftRunway {
                RunwayId = Guid.NewGuid().ToString()
            };
            var aircraftLeftRunwayEvent2 = new AircraftLeftRunway {
                RunwayId = Guid.NewGuid().ToString()
            };
            var tasks = new List <Task>
            {
                SendMessagesAsync(createNewFlightPlanCommand, nameof(CreateNewFlightPlan), count),
                SendMessagesAsync(aircraftTakenOffEvent1, nameof(AircraftTakenOff), count),
                SendMessagesAsync(aircraftTakenOffEvent2, nameof(AircraftTakenOff), count),
                SendMessagesAsync(aircraftLeftRunwayEvent1, nameof(AircraftLeftRunway), count),
                SendMessagesAsync(aircraftLeftRunwayEvent2, nameof(AircraftLeftRunway), count)
            };
            await Task.WhenAll(tasks);

            await Task.Delay(TimeSpan.FromSeconds(4));

            Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription),
                                  m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftTakenOffEvent1.AircraftId);
            var messages = await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}-Output");

            var deadLetterMessages = await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}", deadLetter : true);

            Assert.Equal(count, messages.Count(m => m.Subject == nameof(StartEngines) &&
                                               m.Body.ToObjectFromJson <StartEngines>().EngineId == createNewFlightPlanCommand.Destination));
            Assert.Equal(count, messages.Count(m => m.Subject == nameof(AircraftLeftAirspace) &&
                                               m.Body.ToObjectFromJson <AircraftLeftAirspace>().AircraftIdentifier == aircraftTakenOffEvent1.AircraftId));
            Assert.Equal(count, messages.Count(m => m.Subject == nameof(AircraftLeftAirspace) &&
                                               m.Body.ToObjectFromJson <AircraftLeftAirspace>().AircraftIdentifier == aircraftTakenOffEvent2.AircraftId));
            Assert.Equal(count, deadLetterMessages.Count(m => m.Subject == nameof(AircraftLeftRunway) &&
                                                         m.DeadLetterReason == aircraftLeftRunwayEvent1.RunwayId));
            Assert.Equal(count, deadLetterMessages.Count(m => m.Subject == nameof(AircraftLeftRunway) &&
                                                         m.DeadLetterReason == aircraftLeftRunwayEvent2.RunwayId));
        }
コード例 #2
0
        public async Task CallsMessageProcessors()
        {
            var subscription = nameof(CallsMessageProcessors);

            await CreateEndToEndTestSubscriptionsAsync(subscription);

            var services = new ServiceCollection();

            services.AddHostedService <MessageBusHostedService>()
            .AddSingleton <IMessageTracker, MessageTracker>()
            .AddSingleton <ISendingService, SendingService>()
            .AddMessageBus(new AzureServiceBusClientBuilder(Configuration["Hostname"],
                                                            Configuration["Topic"], subscription, Configuration["TenantId"]))
            .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandler>()
            .AddMessagePreProcessor <TestMessageProcessor>()
            .AddMessagePostProcessor <TestMessageProcessor>();
            _serviceProvider = services.BuildServiceProvider();
            await StartMessageBusHostedServiceAsync(_serviceProvider);

            var aircraftLeftRunwayEvent = new AircraftLeftRunway {
                RunwayId = Guid.NewGuid().ToString()
            };
            var messageId = Guid.NewGuid().ToString();

            await SendMessagesAsync(new AircraftLeftRunway(), nameof(AircraftLeftRunway), 1, null, messageId);

            await Task.Delay(TimeSpan.FromSeconds(4));

            Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(subscription),
                                  m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftLeftRunwayEvent.RunwayId);
            Assert.Equal(2, (await ReceiveMessagesForSubscriptionAsync($"{subscription}-Output")).Count(m =>
                                                                                                        m.Subject == nameof(SetAutopilot) &&
                                                                                                        m.Body.ToObjectFromJson <SetAutopilot>().AutopilotId == messageId));
        }
コード例 #3
0
        public async Task ReceivesAndSendsEvent()
        {
            var inputSubscription = nameof(ReceivesAndSendsEvent);

            await CreateEndToEndTestSubscriptionsAsync(inputSubscription);

            var services = new ServiceCollection();

            services.AddHostedService <MessageBusHostedService>()
            .AddSingleton <IMessageTracker, MessageTracker>()
            .AddMessageBus(new AzureServiceBusClientBuilder(Configuration["Hostname"],
                                                            Configuration["Topic"], inputSubscription, Configuration["TenantId"]))
            .SubscribeToMessage <AircraftLeftRunway, AircraftLeftRunwayHandler>();
            _serviceProvider = services.BuildServiceProvider();
            await StartMessageBusHostedServiceAsync(_serviceProvider);

            var aircraftLeftRunwayEvent = new AircraftLeftRunway {
                RunwayId = Guid.NewGuid().ToString()
            };

            await SendMessagesAsync(aircraftLeftRunwayEvent, nameof(AircraftLeftRunway));

            await Task.Delay(TimeSpan.FromSeconds(4));

            Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription),
                                  m => m.Body.ToObjectFromJson <AircraftTakenOff>().AircraftId == aircraftLeftRunwayEvent.RunwayId);
            Assert.Single(await ReceiveMessagesForSubscriptionAsync($"{inputSubscription}-Output"),
                          m => m.Subject == nameof(AircraftReachedGate) &&
                          m.Body.ToObjectFromJson <AircraftReachedGate>().AirlineId == aircraftLeftRunwayEvent.RunwayId);
        }
コード例 #4
0
        public async Task SendsMessageCopy()
        {
            var inputSubscription = nameof(SendsMessageCopy);

            await CreateEndToEndTestSubscriptionsAsync(inputSubscription);

            var messageType = inputSubscription;

            _serviceProvider = await StartSendMessageCopyTestServiceAsync <AircraftLeftRunwayHandlerWithCopy>(inputSubscription, messageType);

            var aircraftLeftRunwayEvent = new AircraftLeftRunway {
                RunwayId = Guid.NewGuid().ToString()
            };

            await SendMessagesAsync(aircraftLeftRunwayEvent, messageType, 1);

            await Task.Delay(TimeSpan.FromSeconds(4));

            Assert.DoesNotContain(await ReceiveMessagesForSubscriptionAsync(inputSubscription),
                                  m => m.Body.ToObjectFromJson <AircraftLeftRunway>().RunwayId == aircraftLeftRunwayEvent.RunwayId &&
                                  m.Subject == messageType);
            Assert.Equal(3, await FindAircraftReachedGateEventCountAsync(inputSubscription, aircraftLeftRunwayEvent));
        }