gpt4 book ai didi

spring-integration - Spring 与 ExceptionClassifierRetryPolicy 重试集成

转载 作者:行者123 更新时间:2023-12-01 18:35:46 25 4
gpt4 key购买 nike

我正在将 int:request-handler-advice-chain 与我的服务激活器一起使用。它可以与 org.springframework.retry.policy.SimpleRetryPolicy 正常工作,但是我想使用 org.springframework.retry.policy.ExceptionClassifierRetryPolicy 来允许不同数量的根据服务激活器抛出的异常进行重试。

我遇到的问题是,当异常到达ExceptionClassifierRetryPolicy时,它是一个

org.springframework.integration.MessageHandlingException

任何人都可以建议从可用于ExceptionClassifierRetryPolicyMessageHandlingException中获取原因(即我的异常)的最佳方法吗?

感谢 Artem 以下建议的解决方案:

创建 SubclassClassifier 的子类,在发生 MessagingException 时返回原因

public class MessagingCauseExtractingSubclassClassifier extends SubclassClassifier<Throwable, RetryPolicy> {

private static final Logger LOG = LoggerFactory.getLogger(MessagingCauseExtractingSubclassClassifier.class);

public MessagingCauseExtractingSubclassClassifier(final Map<Class<? extends Throwable>, RetryPolicy> policyMap, final RetryPolicy retryPolicy) {
super(policyMap, retryPolicy);
}

@Override
public RetryPolicy classify(final Throwable throwable) {
Throwable t = throwable;
if (t instanceof MessagingException) {
t = t.getCause();
LOG.debug("Throwable is instanceof MessagingException so classifying cause type: {}", t.getClass());
}
return super.classify(t);
}
}

然后是一个使用新分类器和策略映射的新 ExceptionClassifierRetryPolicy 子类

public class MessasgeCauseExtractingExceptionClassifierRetryPolicy extends ExceptionClassifierRetryPolicy {

@Override
public void setPolicyMap(final Map<Class<? extends Throwable>, RetryPolicy> policyMap) {
final MessagingCauseExtractingSubclassClassifier classifier = new MessagingCauseExtractingSubclassClassifier(
policyMap, new NeverRetryPolicy());
setExceptionClassifier(classifier);
}
}

目前,这不支持重新绑定(bind) MessagingException,但这对于我们的用例来说是很好的。否则工作完美。

最佳答案

BinaryExceptionClassifier 具有 traverseCauses 选项来分析整个 StackTrace,直到出现适当的条件。

正是这个选项与 SimpleRetryPolicy 构造函数之一一起使用:

public SimpleRetryPolicy(int maxAttempts, Map<Class<? extends Throwable>, Boolean> retryableExceptions,
boolean traverseCauses) {

请看看该变体是否适合您。

关于spring-integration - Spring 与 ExceptionClassifierRetryPolicy 重试集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31944548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com