这是 Sleuth 的问题。我在那里提出了一个问题。
编辑
这是一个解决方法 - 有点俗气,但它有效......
public class SleuthWorkAroundInterceptor extends ChannelInterceptorAdapter {
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
if (!(message instanceof ErrorMessage)) {
return message;
}
MessagingException payload = (MessagingException) message.getPayload();
Message<?> failedMessage = payload.getFailedMessage();
failedMessage = MessageBuilder.fromMessage(failedMessage)
.removeHeader(MessageHeaders.REPLY_CHANNEL)
.removeHeader(MessageHeaders.ERROR_CHANNEL)
.build();
return new ErrorMessage(new MessagingException(failedMessage, payload), message.getHeaders());
}
}
和
@Bean
public SmartInitializingSingleton ecInterceptorConfigurer(AbstractMessageChannel errorChannel) {
return () -> errorChannel.addInterceptor(0, new SleuthWorkAroundInterceptor());
}