Пример #1
0
        protected override IMessageProducer CreateConsumerEndpoint(IConsumerDestination destination, string group, IConsumerOptions consumerOptions)
        {
            IErrorMessageStrategy errorMessageStrategy = new DefaultErrorMessageStrategy();
            var siBinderInputChannel = ((SpringIntegrationConsumerDestination)destination).Channel;

            var messageListenerContainer = new TestMessageListeningContainer();
            var endpoint = new TestMessageProducerSupportEndpoint(ApplicationContext, messageListenerContainer);

            var groupName           = !string.IsNullOrEmpty(group) ? group : "anonymous";
            var errorInfrastructure = RegisterErrorInfrastructure(destination, groupName, consumerOptions);

            if (consumerOptions.MaxAttempts > 1)
            {
                endpoint.RetryTemplate    = BuildRetryTemplate(consumerOptions);
                endpoint.RecoveryCallback = errorInfrastructure.Recoverer;
            }
            else
            {
                endpoint.ErrorMessageStrategy = errorMessageStrategy;
                endpoint.ErrorChannel         = errorInfrastructure.ErrorChannel;
            }

            endpoint.Init();

            siBinderInputChannel.Subscribe(messageListenerContainer);

            return(endpoint);
        }
Пример #2
0
        public async Task ValidateSuccessfulErrorFlowDoesNotThrowErrors()
        {
            var provider   = services.BuildServiceProvider();
            var outChannel = new DirectChannel(provider);
            var handler    = new ExceptionHandler();

            outChannel.Subscribe(handler);
            var errorChannel = new PublishSubscribeChannel(provider);
            var errorService = new SuccessfulErrorService();
            var errorHandler = new ServiceActivatingHandler(provider, errorService);

            errorChannel.Subscribe(errorHandler);

            var mps = new TestMessageProducerSupportEndpoint(provider);

            mps.OutputChannel = outChannel;
            mps.ErrorChannel  = errorChannel;

            await mps.Start();

            var message = new GenericMessage("hello");

            mps.SendMessage(message);
            Assert.IsType <ErrorMessage>(errorService.LastMessage);
            Assert.IsType <MessageDeliveryException>(errorService.LastMessage.Payload);
            var exception = (MessageDeliveryException)errorService.LastMessage.Payload;

            Assert.Equal(message, exception.FailedMessage);
        }
Пример #3
0
        public async Task TestWithChannelName()
        {
            services.AddSingleton <IMessageChannel>((p) => new DirectChannel(p, "foo"));
            var provider = services.BuildServiceProvider();
            var mps      = new TestMessageProducerSupportEndpoint(provider);

            mps.OutputChannelName = "foo";
            await mps.Start();

            Assert.NotNull(mps.OutputChannel);
            Assert.Equal("foo", mps.OutputChannel.Name);
        }
Пример #4
0
        public async Task ValidateExceptionIfNoErrorChannel()
        {
            var provider   = services.BuildServiceProvider();
            var outChannel = new DirectChannel(provider);
            var handler    = new ExceptionHandler();

            outChannel.Subscribe(handler);

            var mps = new TestMessageProducerSupportEndpoint(provider);

            mps.OutputChannel = outChannel;

            await mps.Start();

            Assert.Throws <MessageDeliveryException>(() => mps.SendMessage(new GenericMessage("hello")));
        }
        public async Task ValidateExceptionIfSendToErrorChannelFails()
        {
            var provider   = services.BuildServiceProvider();
            var outChannel = new DirectChannel(provider.GetService <IApplicationContext>());
            var handler    = new ExceptionHandler();

            outChannel.Subscribe(handler);
            var errorChannel = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());

            errorChannel.Subscribe(handler);

            var mps = new TestMessageProducerSupportEndpoint(provider.GetService <IApplicationContext>());

            mps.OutputChannel = outChannel;
            mps.ErrorChannel  = errorChannel;

            await mps.Start();

            Assert.Throws <MessageDeliveryException>(() => mps.SendMessage(Message.Create("hello")));
        }
Пример #6
0
 public Listener(TestMessageProducerSupportEndpoint adapter)
 {
     _adapter = adapter;
 }