restTemplate请求重发的相关设置-通过配置

本文介绍了如何通过配置restTemplate实现请求重发,包括根据HTTP状态码重试和请求错误重试。默认配置中,HTTP 503状态码会触发重试,最大重试次数为1次,间隔1s。同时,对于特定错误类型,可以设置最多3次的重试机会。通过自定义配置,可以调整重试策略。
摘要由CSDN通过智能技术生成

restTemplate请求重发的相关设置-通过配置

通过配置的方式

相关的pom文件需要引入:httpclient

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

根据响应的HTTP状态码重试

在RestTemplate中有一个服务不可用重试配置,可以通过httpClientBuilder.setServiceUnavailableRetryStrategy来进行相关配置。通过查看源码可以发现,此处需要一个ServiceUnavailableRetryStrategy的实现,该接口已有一个默认的DefaultServiceUnavailableRetryStrategy配置。

默认的配置中,构造器代码如下:
public DefaultServiceUnavailableRetryStrategy(int maxRetries, int retryInterval) {
   
    Args.positive(maxRetries, "Max retries");
    Args.positive(retryInterval, "Retry interval");
    this.maxRetries = maxRetries;
    this.retryInterval = (long)retryInterval;
}

public DefaultServiceUnavailableRetryStrategy() {
   
    this(1, 1000);
}
从默认的构造器源码中可以得到以下信息:
  • 可以设置两个参数,一个是重试次数,一个是重试时间间隔。
  • 默认的最大重试次数为1次,重试时间间隔为1s。
判断的相关代码如下:
public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
   
        return executionCount <= this.maxRetries && response.getStatusLine().getStatusCode() == 503;
    }
  • 可以看出就是一个简单的判断,判断执行次数是否小于最大重试次数且返回的状态码是否为503.
如何定制自己需要的配置
  • 次数和时间默认的配置已经给了构造方法。
  • 如果想根据不同的状态则可以通过自己写一个类实现ServiceUnavailableRetryStrategy
package com.doordiey.game.config;

import org.apache.http.HttpResponse;
import org.apache.http.client.ServiceUnavailableRetryStrategy;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.Args;

/**
 * 根据返回的HTTP状态码决定是否要重试
 */
public class MyDefaultServiceUnavailableRetryStrategy implements ServiceUnavailableRetryStrategy {
   

    private final int maxRetries;
    private final long retryInterval;

    public MyDefaultServiceUnavailableRetryStrategy(int maxRetries, int retryInterval) {
   
        Args.positive(maxRetries, "Max retries");
        Args.positive(retryInterval, "Retry interval");
        this.maxRetries = maxRetries;
        this.retryInterval = (long)retryInterval;
    }

    public MyDefaultServiceUnavailableRetryStrategy() {
   
        this(1, 1000);
    }

    /**
     * 修改此处的判断
     * @param response
     * @param executionCount
     * @param context
     * @return
     */
    public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
   
        return executionCount <= this.maxRetries 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值