如何解决需要在弹簧靴中结合使用断路器和可重试
我遇到的情况是必须点击一个API并发布对该API的响应ID。
如果该API已关闭,我需要每5分钟重试一次,以检查API是否已启动并发送响应ID。
虽然API保持低速状态,但是响应ID可能会增加,因此我必须将所有响应合并为一个响应,并在API启动时发送。
我可以使用@Retryable重试,但不允许我提供业务逻辑以合并数据。
请向我建议一种达到目标的方法。
RetryableConfig:
@Configuration
@EnableRetry
@Slf4j
public class CircuitBreaker {
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(2000l);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
retryTemplate.registerListener(new DefaultListenerSupport());
return retryTemplate;
}
private static class DefaultListenerSupport extends RetryListenerSupport {
@Override
public <T,E extends Throwable> void onError(RetryContext context,RetryCallback<T,E> callback,Throwable throwable) {
log.info("Remote call failed,Will retry (count = " + context.getRetryCount()+" ) exception :" +throwable.getClass().getSimpleName());
super.onError(context,callback,throwable);
}
@Override
public <T,E extends Throwable> void close(final RetryContext context,final RetryCallback<T,final Throwable throwable) {
if (throwable != null) {
log.info("Final retry attempt failed,",throwable);
}
}
}
}
服务:
@Retryable( value = Exception.class,maxAttempts = 2,backoff = @Backoff(delay = 2000))
public String notify(String responseId)
{
Boolean flag = true;
SupplierQuoteIDResponseBO supplierQuoteIDResponseBO = new SupplierQuoteIDResponseBO();
supplierQuoteIDResponseBO.getSupplierQuoteResponse().setResponseId(responseId);
//retryTemplate.execute(retryContext->fuzzyClientHandler.getTestData(supplierQuoteIDResponseBO));
retryTemplate.execute(new RetryCallback<Object,RuntimeException>() {
@Override
public Object doWithRetry(RetryContext context) {
log.info("retry COunt print {}",context.getRetryCount());
return fuzzyClientHandler.getTestData(supplierQuoteIDResponseBO);
}
});
return "response from flow : ";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。