private async Task <bool> ProcessMessageAsync <TMessageContext>(
            MessageHandler handler,
            MessageReceiver messageReceiver,
            string message,
            TMessageContext messageContext,
            MessageCorrelationInfo correlationInfo,
            CancellationToken cancellationToken)
            where TMessageContext : AzureServiceBusMessageContext
        {
            bool canProcessMessage             = handler.CanProcessMessage(messageContext);
            var  messageType                   = (Type)handler.GetType().GetProperty("MessageType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(handler);
            bool tryDeserializeToMessageFormat = TryDeserializeToMessageFormat(message, messageType, out var result);

            if (canProcessMessage && tryDeserializeToMessageFormat)
            {
                if (result is null)
                {
                    return(false);
                }

                await PreProcessingAsync(handler, messageContext, messageReceiver);

                await handler.ProcessMessageAsync(result, messageContext, correlationInfo, cancellationToken);

                return(true);
            }

            return(false);
        }
Exemple #2
0
        public void CustomMessageHandlerConstructor_WithContextFilterObsolete_SubtractsRegistration(bool matchesContext)
        {
            // Arrange
            var collection = new MessageHandlerCollection(new ServiceCollection());

            collection.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>((TestMessageContext messageContext) => matchesContext);
            ServiceProvider serviceProvider = collection.Services.BuildServiceProvider();

            // Act
            IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger);

            // Assert
            MessageHandler messageHandler = Assert.Single(messageHandlers);

            Assert.NotNull(messageHandler);

            var context = TestMessageContext.Generate();

            Assert.Equal(matchesContext, messageHandler.CanProcessMessage(messageContext: context));
        }
Exemple #3
0
        public void CustomMessageHandlerFactory_WithDefaultContextFilterObsolete_SubtractsRegistration(bool matchesContext)
        {
            // Arrange
            var collection = new MessageHandlerCollection(new ServiceCollection());
            var spyHandler = new DefaultTestMessageHandler();

            collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(
                (MessageContext messageContext) => matchesContext,
                provider => spyHandler);
            ServiceProvider serviceProvider = collection.Services.BuildServiceProvider();

            // Act
            IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger);

            // Assert
            MessageHandler messageHandler = Assert.Single(messageHandlers);

            Assert.NotNull(messageHandler);

            var context = new MessageContext("message-id", new Dictionary <string, object>());

            Assert.Equal(matchesContext, messageHandler.CanProcessMessage(messageContext: context));
        }