그 목적을 위해 정확히 MessageChannel
에 대해 errorChannel
헤더를 지정해야합니다.이 값은 발신자와 정확히 일치해야합니다. failedMessage.getHeaders().getErrorChannel()
와 부분
private MessageChannel resolveErrorChannel(Throwable t) {
Message<?> failedMessage = (t instanceof MessagingException) ?
((MessagingException) t).getFailedMessage() : null;
if (this.defaultErrorChannel == null && this.channelResolver != null) {
this.defaultErrorChannel = this.channelResolver.resolveDestination(
IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME);
}
if (failedMessage == null || failedMessage.getHeaders().getErrorChannel() == null) {
return this.defaultErrorChannel;
}
Object errorChannelHeader = failedMessage.getHeaders().getErrorChannel();
if (errorChannelHeader instanceof MessageChannel) {
return (MessageChannel) errorChannelHeader;
}
Assert.isInstanceOf(String.class, errorChannelHeader,
"Unsupported error channel header type. Expected MessageChannel or String, but actual type is [" +
errorChannelHeader.getClass() + "]");
return this.channelResolver.resolveDestination((String) errorChannelHeader);
}
에주의 :
ExecutorChannel
는 같은 코드를 가지고있는
MessagePublishingErrorHandler
을 기반으로합니다.
@MessagingGateway
의 errorChannel
옵션을 사용하면 좋은 해결책을 얻을 수 있습니다. 이것은 정확히 동일한 errorChannel
헤더 기술을 사용하고 정확히 @MessagingGateway
의 범위에서 예외를 처리하거나 다시 던지게합니다.