public void TestErrorsNoRetry() { var searchDirectories = GetSearchDirectories("TestBinder"); IServiceProvider serviceProvider = CreateStreamsContainer(searchDirectories).BuildServiceProvider(); var messageConverter = serviceProvider.GetService <ISmartMessageConverter>(); Assert.NotNull(messageConverter); var binder = serviceProvider.GetService <IBinder>() as AbstractPollableMessageSourceBinder; Assert.NotNull(binder); var configurer = serviceProvider.GetService <MessageConverterConfigurer>(); Assert.NotNull(configurer); var pollableSource = new DefaultPollableMessageSource(serviceProvider.GetService <IApplicationContext>(), messageConverter); configurer.ConfigurePolledMessageSource(pollableSource, "foo"); pollableSource.AddInterceptor(new TestSimpleChannelInterceptor()); var properties = new ConsumerOptions() { MaxAttempts = 1 }; properties.PostProcess(); var latch = new CountdownEvent(1); binder.BindConsumer("foo", "bar", pollableSource, properties); var errorChan = serviceProvider.GetServices <IMessageChannel>().Where(chan => chan.ServiceName == IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME).Single() as ISubscribableChannel; var errorChanHandler = new TestErrorsErrorChannelHandler(latch); errorChan.Subscribe(errorChanHandler); var h1 = new TestFuncMessageHandler((m) => { throw new Exception("test recoverer"); }); Assert.True(pollableSource.Poll(h1)); Assert.Equal(1, h1.Count); }
public void TestErrors() { var searchDirectories = GetSearchDirectories("TestBinder"); IServiceProvider serviceProvider = CreateStreamsContainer(searchDirectories).BuildServiceProvider(); var messageConverter = serviceProvider.GetService <ISmartMessageConverter>(); Assert.NotNull(messageConverter); var binder = serviceProvider.GetService <IBinder>() as AbstractPollableMessageSourceBinder; Assert.NotNull(binder); var configurer = serviceProvider.GetService <MessageConverterConfigurer>(); Assert.NotNull(configurer); var pollableSource = new DefaultPollableMessageSource(serviceProvider.GetService <IApplicationContext>(), messageConverter); configurer.ConfigurePolledMessageSource(pollableSource, "foo"); pollableSource.AddInterceptor(new TestSimpleChannelInterceptor()); var properties = new ConsumerOptions() { MaxAttempts = 2, BackOffInitialInterval = 0, RetryableExceptions = new List <string>() { "!System.InvalidOperationException" } }; properties.PostProcess(); var latch = new CountdownEvent(2); binder.BindConsumer("foo", "bar", pollableSource, properties); var errorChan = serviceProvider.GetServices <IMessageChannel>().Where(chan => chan.ServiceName == IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME).Single() as ISubscribableChannel; var errorChanHandler = new TestErrorsErrorChannelHandler(latch); errorChan.Subscribe(errorChanHandler); var h1 = new TestFuncMessageHandler((m) => { throw new Exception("test recoverer"); }); Assert.True(pollableSource.Poll(h1)); Assert.Equal(2, h1.Count); var getter = binder.GetType().GetProperty("LastError").GetGetMethod(); var lastError = getter.Invoke(binder, new object[0]) as IMessage; Assert.NotNull(lastError); var lastErrorMessage = ((Exception)lastError.Payload).InnerException.Message; Assert.Equal("test recoverer", lastErrorMessage); var h2 = new TestFuncMessageHandler((m) => { throw new InvalidOperationException("no retries"); }); Assert.True(pollableSource.Poll(h2)); Assert.Equal(1, h2.Count); lastError = getter.Invoke(binder, new object[0]) as IMessage; lastErrorMessage = ((Exception)lastError.Payload).InnerException.Message; Assert.Equal("no retries", lastErrorMessage); }