diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java index a93715271..c6733a205 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java @@ -684,8 +684,11 @@ public abstract class AbstractMessageChannelBinder recoverer); + if (!getApplicationContext().containsBean(recovererBeanName)) { + ((GenericApplicationContext) getApplicationContext()).registerBean( + recovererBeanName, ErrorMessageSendingRecoverer.class, () -> recoverer); + } + MessageHandler handler; if (polled) { handler = getPolledConsumerErrorMessageHandler(destination, group, @@ -711,11 +714,13 @@ public abstract class AbstractMessageChannelBinder errorHandler); - errorChannel.subscribe(handler); + if (!getApplicationContext().containsBean(errorMessageHandlerName)) { + MessageHandler errorHandler = handler; + ((GenericApplicationContext) getApplicationContext()).registerBean( + errorMessageHandlerName, MessageHandler.class, + () -> errorHandler); + errorChannel.subscribe(handler); + } } else { this.logger.warn("The provided errorChannel '" + errorChannelName @@ -734,8 +739,10 @@ public abstract class AbstractMessageChannelBinder errorBridge); + if (getApplicationContext().containsBean(errorBridgeHandlerName)) { + ((GenericApplicationContext) getApplicationContext()).registerBean( + errorBridgeHandlerName, BridgeHandler.class, () -> errorBridge); + } } else { this.logger.warn("The provided errorChannel '" + errorChannelName