如何解决当特定方法失败而不是重试该失败方法时,是否有任何方法可以重试不同的方法
我有一个要求,其中我有 2 个方法(在不同的类中),其中一个方法使 Rest GET 调用以获取令牌(类似于会话令牌,有效期为几秒钟)和另一种方法附加此检索到的令牌在标头中并进行 Rest POST 调用,因此每当 POST 调用因令牌过期而失败时,我需要重试 GET 调用方法(而不是单独重试 POST 调用)以获取新令牌并在 POST 请求标头中使用令牌并重试 post 调用(使用新令牌)。我只能看到可重试的重试方法失败,在我的情况下,它会单独重试 POST 调用,因此最终会使用过期的令牌重试 post 调用方法。当过期令牌的 post 方法失败时,我想重试 Get 方法和 POST 方法。所以我想知道当特定方法失败时有什么方法可以重试不同的方法。感谢您的帮助。
可重试类(getCSRFToken-get call,sapPost-post call)
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Component;
@Component
public class RestTemplateRetry extends AbstractRestTemplate{
@Retryable(value= {Exception.class},maxAttempts=5,backoff = @Backoff(delay = 2000))
public ResponseEntity<String> getCSRFToken (HttpEntity<String> entity,String getUrl) throws Exception{
ResponseEntity<String> csrfToken= getRestTempalte().exchange(getUrl,HttpMethod.GET,entity,String.class);
return csrfToken;
}
@Retryable(value= {Exception.class},backoff = @Backoff(delay = 2000))
public ResponseEntity<String> sapPost (HttpEntity<String> entity,String postUrl)throws Exception{
ResponseEntity<String> response= getRestTempalte().exchange(postUrl,HttpMethod.POST,String.class);
return response;
}
}
监听类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.listener.RetryListenerSupport;
import org.springframework.stereotype.Component;
@Component
public class RetryListener extends RetryListenerSupport {
Logger log = LoggerFactory.getLogger(getClass());
@Override
public <T,E extends Throwable> void onError(
RetryContext context,RetryCallback<T,E> callback,Throwable throwable) {
log.warn("Retryable method {} threw {}th,attempted retries = {} with exception {}",context.getAttribute("context.name"),context.getRetryCount(),context.getRetryCount() - 1,throwable.toString());
}
}
解决方法
没有;不支持;您需要为这些更复杂的场景编写自定义代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。