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 5dcd9b518..52eee73f3 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 @@ -47,6 +47,7 @@ import org.springframework.context.support.GenericApplicationContext; import org.springframework.expression.Expression; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.channel.AbstractSubscribableChannel; +import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.PublishSubscribeChannel; import org.springframework.integration.context.IntegrationContextUtils; import org.springframework.integration.core.MessageProducer; @@ -585,20 +586,24 @@ public abstract class AbstractMessageChannelBinder errorChannel); + if (errorChannelObject instanceof DirectChannel) { + errorChannelName = "bridged." + errorChannelName; + BridgeHandler bridge = new BridgeHandler(); + bridge.setOutputChannel((MessageChannel) errorChannelObject); + errorChannel.subscribe(bridge); + } } + + ((GenericApplicationContext) getApplicationContext()).registerBean( + errorChannelName, SubscribableChannel.class, () -> errorChannel); MessageChannel defaultErrorChannel = null; if (getApplicationContext() .containsBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)) {