实现HttpClient重试
来源:互联网 发布:守望先锋生涯数据出错 编辑:程序博客网 时间:2024/06/01 08:13
场景应用
目前程序中涉及到需要callback操作,product需要被动的接收consume的处理状态,为了最大程度的能够callback成功因此consume在http调用出现问题(如:服务不可用、异常、超时)情况下需要进行重试(retry request)。
1、针对异常的重试
例如:connect timed out/read timed out
HttpClientBuilder.create() .setRetryHandler(new HttpRequestRetryHandler() { @Override public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { if (executionCount >= 3) { // Do not retry if over max retry count return false; } return true; }) .setConnectionManager(new PoolingHttpClientConnectionManager()) .setDefaultRequestConfig(requestConfig) .build();如此实现针对异常进行3次重试的效果
2、针对响应错误码进行重试
例如400/500等
首先需要定义一个重试策略类:
package com.gomefinance.esign.httpretry;import org.apache.http.HttpResponse;import org.apache.http.client.ServiceUnavailableRetryStrategy;/** * 针对请求地址可达,非200 响应码进行重试 */public class MyServiceUnavailableRetryStrategy implements ServiceUnavailableRetryStrategy { private int executionCount; private long retryInterval; MyServiceUnavailableRetryStrategy(Builder builder) { this.executionCount = builder.executionCount; this.retryInterval = builder.retryInterval; } /** * retry逻辑 */ @Override public boolean retryRequest(HttpResponse response, int executionCount, org.apache.http.protocol.HttpContext context) { if (response.getStatusLine().getStatusCode() != 200 && executionCount < executionCount) return true; else return false; } /** * retry间隔时间 */ @Override public long getRetryInterval() { return this.retryInterval; } public static final class Builder { private int executionCount; private long retryInterval; public Builder() { executionCount = 3; retryInterval = 1000; } public Builder executionCount(int executionCount) { this.executionCount = executionCount; return this; } public Builder retryInterval(long retryInterval) { this.retryInterval = retryInterval; return this; } public MyServiceUnavailableRetryStrategy build() { return new MyServiceUnavailableRetryStrategy(this); } }}之后需要如下
ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new MyServiceUnavailableRetryStrategy.Builder() .executionCount(3) .retryInterval(1000) .build();HttpClientBuilder.create() .setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy) .setConnectionManager(new PoolingHttpClientConnectionManager()) .setDefaultRequestConfig(requestConfig) .build();即可实现针对错误码的异常处理
3、针对错误和错误码进行处理
ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new MyServiceUnavailableRetryStrategy.Builder() .executionCount(3) .retryInterval(1000) .build(); httpClient = HttpClientBuilder.create() .setRetryHandler((e,executionCount,contr)->{ if (executionCount >= 3) { // Do not retry if over max retry count return false; } return true; }) .setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy) .setConnectionManager(new PoolingHttpClientConnectionManager()) .setDefaultRequestConfig(requestConfig) .build();以上就是针对HttpClient重试的方式。
参考文献
ranong项目总结-HttpClient-RetryHandler重试(一)阅读全文
0 0
- 实现HttpClient重试
- HttpClient通过RetryHandler实现超时重试
- 总结-HttpClient-RetryHandler重试
- HttpClient-RetryHandler重试
- OkHttp实现延时重试
- Android 网络连接-重试机制-HttpRequestRetryHandler(HttpClient)
- Httpclient 设置读取超时及连接重试等配置
- ranong项目总结-HttpClient-RetryHandler重试(一)
- C#中实现Exception时重试功能
- Java 自定义注解实现网络访问重试
- java调度器(重试机制)实现
- rocketmq cluster下concurrently重试机制实现
- 失败重试的一种实现方式
- 优雅实现重试功能选型分析
- Dubbo 超时与重试的实现分析
- java重试工具库: 实现业务逻辑与重试逻辑的解耦
- RxJava(六) retryWhen操作符实现错误重试机制
- RxJava retryWhen操作符实现错误重试机制
- 12.leetCode690. Employee Importance
- Discuz!X json输出解析后模板
- android精确绘制文字位置的方法
- C#中属性和字段的区别
- Linux创建用户并加入sudoers文件
- 实现HttpClient重试
- 原生js实现的鼠标滑上去之后按照屏幕高度放大缩略图
- Window 透明窗体的实现总结
- OpenCV-将JPG图像的第二个通道和第三个通道的值设置为最大值
- 多线程创建的四种方式
- oracle 存储过程 ,触发器练习
- 关键字volatite
- hadoop hdfs uri详解 一、hdfs基本命令: hadoop fs -cmd <args> 选项: cmd: 具体的操作,基本上与UNIX的命令行相同 args: 参数 二、hdfs资
- ovs-ofctl 官方文档学习笔记