- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在阅读 GCM:https://developers.google.com/cloud-messaging/server
其中一项要求是服务器需要能够:
我的后端使用来自 Spring Boot 的 Spring RestTemplate。似乎没有可用于在文档中设置重试策略的方法:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html
另外,当我用谷歌搜索时,我找到了 RetryTemplate,但它是 Spring Batch 的一部分并且没有扩展 RestTemplate,这让我认为它不应该用于 Rest 操作,而是 Spring Batch 操作,比如处理大交易金额:http://docs.spring.io/spring-batch/2.1.x/apidocs/org/springframework/batch/retry/support/RetryTemplate.html
有没有一种方法可以将指数退避与 Spring RestTemplate 一起使用?
最佳答案
美好的一天!
我想,可以通过实现自定义 Sleeper 来实现所需的行为类。
接下来您需要将此卧铺设置为 BackOffPolicy如下:
public class RetryTest {
public static final Logger LOG = LoggerFactory.getLogger(RetryTemplate.class);
@org.junit.Test
public void testRT() {
RetryTemplate retryTemplate = new RetryTemplate();
final SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
retryTemplate.setRetryPolicy(retryPolicy);
Sleeper sleeper = new Sleeper() {
private long timeToSleep = 0;
@Override
public void sleep(long timeout) throws InterruptedException {
if (timeToSleep ==0) {
timeToSleep = timeout;
} else {
timeToSleep = (long) (timeToSleep * Math.E);
}
LOG.warn("sleeping for: {}", timeToSleep);
Thread.sleep(timeToSleep);
}
};
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy().withSleeper(sleeper);
retryTemplate.setBackOffPolicy(backOffPolicy);
retryTemplate.execute(new RetryCallback<Void, ResourceAccessException>() {
@Override
public Void doWithRetry(RetryContext retryContext) throws ResourceAccessException {
LOG.debug(">RetryCount: {}", retryContext.getRetryCount());
new RestTemplate().getForObject("https://unreachable.host", String.class);
return null;
}
});
}
}
还有ExponentialBackOffPolicy通过 Spring 重试。
希望这会有所帮助。
关于java - Spring RestTemplate : Exponential Backoff retry policy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906419/
我想出了一个只在每 10、20、30... 100、200、300...、1000、2000 时触发的方法,但我想看看是否有更好的方法来做到这一点。 unsigned long fails = 0;
我的互斥量实现只是在 CAS 失败时重试(伪代码): while(!compare_and_swap(&mutex, 0, 1)); 但它浪费了太多的 CPU 周期。 我了解到“指数退避”可以提高整体
可能有一些根本的原因是,pod删除和重新创建会执行pod重启不会执行的操作(按照Crashloop重新启动)。我的第一个念头是装入文件等。即使删除了Crashloop,我也看到删除后解决了一些问题的地
我正在从事一个 Spring 项目,并且正在尝试为 RabbitMQ 队列实现带有死信的指数退避。 在此过程中,我创建了一个死信队列和一个死信交换 (Fanout),并将原始队列的 x-dead-le
当响应为 5xx 时,我想在等待 10 秒后重试请求 3 次。但我没有看到可以使用的方法。在对象上 WebClient.builder() .baseUrl("..."
我正在阅读 GCM:https://developers.google.com/cloud-messaging/server 其中一项要求是服务器需要能够: 处理请求并使用指数退避重新发送它们。 我的
我们正在使用 Beanstalk 上的工作层来发送 webhook。我们需要使用指数退避,以防在联系第三方时出现任何错误。但是,我不清楚这将如何工作。 如果作业失败并且我调用了 ChangeMes
我知道当 RPC 调用失败时,指数退避是一件好事。到目前为止,在我的 GAE/P 应用程序中,我已经通过使用任务队列实现了指数退避: deferred.defer(function_that_make
我有一个推送订阅,可将消息发送到 Cloud Run 服务。如果 Cloud Run 服务未成功确认消息(否定确认),我希望以最大次数重新发送消息,重试之间的时间间隔始终相同(例如,重试 10 次,每
我有一个推送订阅,可将消息发送到 Cloud Run 服务。如果 Cloud Run 服务未成功确认消息(否定确认),我希望以最大次数重新发送消息,重试之间的时间间隔始终相同(例如,重试 10 次,每
低于参数,试图使可配置 @Async("threadPoolTaskExecutor") @Retryable(value = MessagingException.class, maxAttempt
从今天开始我得到了很多 WARNING conda.gateways.disk:exp_backoff_fn(47): Uncaught backoff with errno 41 当我尝试使用 co
我遇到了一个无法解决的奇怪问题,因为我的问题在搜索此错误时有所不同。人们在尝试将 Filebeat 连接到 Logstash 时似乎遇到过这种情况。 但是,我试图将日志直接写入 Elasticsear
我是一名优秀的程序员,十分优秀!