diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/ErrorBindingTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/ErrorBindingTests.java index c1d394c1b..daf066374 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/ErrorBindingTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/ErrorBindingTests.java @@ -97,6 +97,19 @@ public class ErrorBindingTests { assertThat(binder.getLastError()).isNotNull(); } + @Test + void testErrorBindingWithMultipleDestinationPerBinding() { + new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration(NoErrorHandler.class)) + .web(WebApplicationType.NONE) + .run("--spring.cloud.stream.bindings.process-in-0.consumer.max-attempts=1", + "--spring.cloud.function.definition=process", + "--spring.cloud.stream.bindings.process-in-0.destination=one,two", + "--spring.jmx.enabled=false"); + + // must not fail GH-2599 + } + @EnableAutoConfiguration public static class TestProcessor { diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java index f00fa6113..28fbb8263 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java @@ -741,7 +741,6 @@ public abstract class AbstractMessageChannelBinder binderErrorChannel); + if (!this.getApplicationContext().containsBean(errorChannelName)) { + ((GenericApplicationContext) getApplicationContext()).registerBean( + errorChannelName, SubscribableChannel.class, () -> binderErrorChannel); + } this.subscribeFunctionErrorHandler(errorChannelName, consumerProperties.getBindingName()); ErrorMessageSendingRecoverer recoverer = new ErrorMessageSendingRecoverer(binderErrorChannel, errorMessageStrategy);