0

我创建了一个演示项目:https ://github.com/imram/si-errorhandling-sleuth 。

我遇到的问题是,当我在我的 Spring 集成应用程序中使用 Spring Cloud Sleuth 时,错误流会被破坏,即如果给出回复超时,网关会无限停止/直到超时,然后它将 null 返回给网关的调用者。

如果在没有 Sleuth Dependency 的情况下执行相同的应用程序,则没有问题。

如果我的 SI 设置有问题或其已知问题,有人可以帮忙吗?如果这是一个问题,那么有人可以建议解决方法吗?

仅供参考,我确实想使用 Sleuth 为每笔交易生成 Correlation Id,以实现可追溯性的目的。

谢谢!!

4

1 回答 1

0

这是 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());
}
于 2017-10-27T15:58:36.907 回答