文章目录

  • 所需依赖
  • 实现failsafe安全失败
  • 构建Get请求
  • 构建Post请求
  • 自定义响应处理

所需依赖

        <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>fluent-hc</artifactId><version>4.5.10</version></dependency><dependency><groupId>net.jodah</groupId><artifactId>failsafe</artifactId><version>2.3.1</version></dependency>

fluent-hc用于构建http请求,failsafe用于定义安全失败重试, 所谓安全失败重试其实就是某一个任务失败了, 但是无关大碍,我们看见可以进行多次尝试, 比如一些连接失败等等。。。

实现failsafe安全失败

可以配置拦截到的异常, 延时重试, 尝试次数

    private final RetryPolicy<Object> retryPolicy = new RetryPolicy<>()//如果获得这个异常,则执行重试.handle(SocketTimeoutException.class)//延迟俩秒.withDelay(Duration.ofSeconds(2))//最多尝试俩次.withMaxRetries(2);

拓展知识

1.failover:失效转移
Fail-Over的含义为“失效转移”,是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。其要点在于有主有备,且主故障时备可启用,并设置为主。如Mysql的双Master模式,当正在使用的Master出现故障时,可以拿备Master做主使用
2.failfast:快速失败
从字面含义看就是“快速失败”,尽可能的发现系统中的错误,使系统能够按照事先设定好的错误的流程执行,对应的方式是“fault-tolerant(错误容忍)”。以JAVA集合(Collection)的快速失败为例,当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常(发现错误执行设定好的错误的流程),产生fail-fast事件。
3.failback:失效自动恢复
Fail-over之后的自动恢复,在簇网络系统(有两台或多台服务器互联的网络)中,由于要某台服务器进行维修,需要网络资源和服务暂时重定向到备用系统。在此之后将网络资源和服务器恢复为由原始主机提供的过程,称为自动恢复
4.failsafe:失效安全
Fail-Safe的含义为“失效安全”,即使在故障的情况下也不会造成伤害或者尽量减少伤害。维基百科上一个形象的例子是红绿灯的“冲突监测模块”当监测到错误或者冲突的信号时会将十字路口的红绿灯变为闪烁错误模式,而不是全部显示为绿灯。

构建Get请求

        //传入重试机制String content = Failsafe.with(retryPolicy).get(() ->//构建一个get请求//请求connectTimeout()设置连接超时//socketTimeout() 设置文本读取超时//execut() 执行远程连接的核心方法,就是发起一个HttpRequest并返回一个HttpResponse//returnContent() 获取返回请求结果Content,其实也就是流文本Request.Get(url).connectTimeout(1000).socketTimeout(500).execute().returnContent().asString());

connectTimeout()设置连接超时
socketTimeout() 设置文本读取超时
execut() 执行远程连接的核心方法,就是发起一个HttpRequest并返回一个HttpResponse
returnContent() 获取返回请求结果Content,其实也就是流文本

构建Post请求

        String content = Failsafe.with(retryPolicy).get(() ->//构建一个post请求//请求体body可以使用方法bodyString()按照文本格式传入即可// 如:json字符串的文本类型APPLICATION_JSON//设置连接时间和文本读取时间,//execute执行这个请求获得respondRequest.Post(h5Url).bodyString(dataJson, ContentType.APPLICATION_JSON).connectTimeout(DEFAULT_CONNECT_TIMEOUT).socketTimeout(DEFAULT_SOCKET_TIMEOUT).execute().returnContent().asString());

还有一些额外的经常用到的方法
bodyForm()方法构造表单提交。

        .bodyForm(Form.form().add("username", "vip").add("password", "secret").build())

根据需要返回不同的文本类型asBytes(),asString(),也支持直接写入文件saveContent()

.saveContent(new File("result.dump")); //保存为文件

自定义响应处理

如上所说,execut()执行后得到一个HttpResponse对象,可以使用方法handleResponse()自定义响应处理。

Document result = Request.Get(url).execute().handleResponse(new ResponseHandler<Document>() {public Document handleResponse(final HttpResponse response) throws IOException {...}});

组件fluent-hc优点:
fluent-hc本质是对HttpClient的封装,链式操作简便,易于解读
不必处理连接管理和资源分配
连接池技术减少资源开销增强性能

Executor执行器的对象是从连接池中获取的HttpClient对象。采用HTTP连接池技术降低了频繁建立HTTP连接的时间开销,减少了TCP连接建立和释放时socket通信服务器端资源的浪费,同时支持更高的并发量。

Java~基于fluent-hc快速构建Http请求,结合failsafe实现异常重试相关推荐

  1. mysql htap 开源_基于开源应用快速构建HTAP系统

    原标题:基于开源应用快速构建HTAP系统 利用ProxySQL.MySQL.ClickHouse快速构建HTAP系统1. 关于ClickHouse 企业里随着数据量的增加,以及日趋复杂的分析性业务需求 ...

  2. Java使用apache.http.client.fluent快速构建HTTP请求

    相关包 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><depend ...

  3. 基于FPGA异构计算快速构建高性能图像处理解决方案

    FPGA与CPU相比进一步强化了算力,尤其适合各类并行化计算:而与GPU相比,其更细粒度及灵活的并行化及流水线控制天然的对复杂算法有更强的适应性,能够充分发挥出算力优势,从而带来计算效率的提升.针对数 ...

  4. 认真写博客第一篇:java基于spring jersey mybatis 构建restful

    本例基于IDEA: 1.先建立项目 new出一个projec 起个什么名字比较好呢,哈哈哈哈! 那么就叫他德玛西亚吧! 然后呢基于maven,大家事先准备好maven哦. 那么接下来就是设置这个狂拽酷 ...

  5. 基于开源应用快速构建HTAP系统(2)-阿里云开发者社区

    上述规则的意思是,当SELECT语句中包含 "+CLICKHOUSE" 关键字时,就会自动转发到 ClickHouse 后端去处理,其余的都发送到MySQL后端处理.例如下面这两条 ...

  6. mysql枫_MySQL_java语言存取mysql快速构建,By 风过留枫, 出处:dujid 环境 - phpStudy

    java语言存取mysql快速构建 By 风过留枫, 出处:dujid 环境: 操作系统: RedHat linux 7.1 mysql服务器: 3.23.36 (linux 7.1附带) mysql ...

  7. Linux三大主流网站构建平台,Linux快速构建LAMP网站平台

    1.1 问题 本例要求基于Linux主机快速构建LAMP动态网站平台,并确保可以支撑PHP应用及数据库,完成下列任务: 1)安装LAMP平台各组件,启动LAMP平台 软件包:httpd.mariadb ...

  8. 基于Bluemix快速构建部署一款Java小程序——微博影响力分析器

    一.前言 近年来IT界风云际会,各种新概念如大数据.云平台.虚拟化等,如雨后春笋般层出不穷.而云平台,可以说是近些年来引领时代新潮的边缘概念之一,各大厂商竞相推出各种云产品,抢占云市场高地.近期,IT ...

  9. 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...

  10. 如何基于 Apache Doris 与 Apache Flink 快速构建极速易用的实时数仓

    随着大数据应用的不断深入,企业不再满足离线数据加工计算的时效,实时数据需求已成为数据应用新常态.伴随着实时分析需求的不断膨胀,传统的数据架构面临的成本高.实时性无法保证.组件繁冗.运维难度高等问题日益 ...

最新文章

  1. Xtrabackup实现数据的备份与恢复
  2. 支配vue框架模版语法之v-cloak
  3. java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
  4. OpenCV实现图像颜色特征提取
  5. java web系统拆分_Java系统中如何拆分同步和异步
  6. java Hashtable的遍历方法
  7. 分支 getchar和putchar
  8. JAVA网络编程-TCP客户端与服务器端连接
  9. JavaScript练习(一)——跟随鼠标移动
  10. Baby-Step-Giant-Step算法
  11. python打开是什么颜色-Python中常见颜色记录
  12. 检测计算机主板是否坏掉,解决办法:如何判断cpu是否坏以及主板是否坏,如何检测主板故障...
  13. 偏差-方差权衡(bias-variance-tradeoff)
  14. excel隐藏的选项卡和命令栏怎么找回?
  15. nyoj 541 最强DE 战斗力
  16. PTA python 求分数序列前N项和
  17. HC-06蓝牙模块的使用
  18. 几何画板教程:几何画板功能知多少?
  19. 命令行编译Qt程序(qmake+jom/Nmake/mingW)
  20. std::Auto_Ptr(仿写)

热门文章

  1. 如何优雅地记录操作日志
  2. echarts画工作流(流程图)
  3. 《零秒工作》的一些总结
  4. Hadoop运维记录系列(十九)
  5. 创新设计思维---自学报告
  6. X1000代码烧写配置
  7. Linux的oracle账户解锁,如何解锁Oracle数据库中账号
  8. #扒一扒网易云课堂python课程,发现还是有不少可以白嫖的免费好资源
  9. 安卓手机超频CPU(无修饰CPU控制)
  10. oss新增bucket权限问题