Arrays类与Array类探究
Resilience4j是用来替代Hystrix的一个开源组件。
引入依赖:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.3.1</version>
<exclusions>
<exclusion>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-circuitbreaker</artifactId>
</exclusion>
<exclusion>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-timelimiter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-circuitbreaker</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-timelimiter</artifactId>
<version>1.3.1</version>
</dependency>
用Resilience4j实现重试:
1、用@Retry标注调用下游服务的接口方法,用name属性指定这个重试的名称。我们可以针对不同的调用下游服务制定不同的重试策略
@FeignClient(name = "spring-cloud-eureka-client-producer")
@Component
public interface MyInterface {
@Retry(name = "helloRetry")
@PostMapping(value = "/hello")
String hello(@RequestBody Person person);
}
2、在配置文件中添加
resilience4j.retry.retry-aspect-order=1
resilience4j.retry.backends.helloRetry.max-retry-attempts=3
resilience4j.retry.backends.helloRetry.wait-duration=2000
resilience4j.retry.backends.helloRetry.event-consumer-buffer-size=1
resilience4j.retry.backends.helloRetry.enable-exponential-backoff=false
resilience4j.retry.backends.helloRetry.exponential-backoff-multiplier=2
resilience4j.retry.backends.helloRetry.enable-randomized-wait=false
resilience4j.retry.backends.helloRetry.randomized-wait-factor=2
resilience4j.retry.backends.helloRetry.retry-exception-predicate=com.kou.springbooteurekaconsumerdemo.HelloRetryExceptionPredicate
retry-aspect-order指定重试优先级,max-retry-attempts指定最多执行多少次,wait-duration指定上次执行失败后多少毫秒后才重试,
3、新建步骤2中用到的HelloRetryExceptionPredicate类
public class HelloRetryExceptionPredicate implements Predicate<Throwable> {
@Override
public boolean test(Throwable throwable) {
if (throwable instanceof FeignException) {
FeignException e = (FeignException) throwable;
Throwable cause = e.getCause();
return cause instanceof IOException;
}
return false;
}
}
这个类指定了只有调下游服务抛IOException时才重试。当然,我们也可以指定404、50X时也重试。
如果不想为每一个调用都指定重试策略,而是想所有的调用都指定同一个重试策略,那么只需指定所有调用的@Retry注解的name属性值都相同就可以了。
如何实现fallback呢?
用Resilience4j实现断路器:
1、用@CircuitBreaker标注调用下游服务的接口方法,用name属性指定这个重试的名称。我们可以针对不同的调用下游服务制定不同的重试策略
Arrays类与Array类探究的更多相关文章
- Arcpy中Geometry类与Array类转换的陷阱
1.现象说明 使用Arcpy.da.searchcursor得到Geometry,将Geometry转换成Array,再从Array转换回Geometry.若Geometry包含内环,这个过程可能导致 ...
- Java集合---Array类源码解析
Java集合---Array类源码解析 ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...
- 使用Array类处理基本数组对象
java里面的Arrays类有个asList方法,参数是1或多个Object对象,如果传入一个Object数组,则可以将该数组转化为List,但如果传入的是一个基本类型的数据(int,long,sho ...
- 数组的定义和使用,理解多维数组和Array类
数组的作用 在执行程序的过程中,通常会需要存储大量数据.如果只有少量数据,那么通过声明变量,存储到变量中即可.但当我们的数据是20个.40个甚至是100以上时,就意味着需要声明很多变量,这是不现实的, ...
- 01 语言基础+高级:1-3 常用API第一部分_day08【String类、static、Arrays类、Math类】
day08[String类.static.Arrays类.Math类] String类static关键字Arrays类Math类 教学目标能够使用String类的构造方法创建字符串对象能够明确Stri ...
- String类、static关键字、Arrays类、 Math类的一些学习心得
String类 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如"abc" )都可以被看作是实现此类的实例. 类 String 中包括用于检查各 ...
- .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)
从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...
- javascript Array类
Array类 toString()方法和valueOf()方法,返回特殊的字符串.该字符串是通过对每项调用toString()方法,然后用逗号把它们连接在一起构成的.例如,对具有项"red& ...
- C# - 系统类 - Array类
Array类 ns:System Array是一个抽象类 表示数组 提供了创建.查找.删除.排序.修改等应用于数组的操作 此类没有公有的实例构造函数 可以使用静态方法CreateInstance创建A ...
随机推荐
- WebApi 跨域问题解决方案:CORS
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看W ...
- 解决MySQL 在 Java 检索遇到timestamp空值时报异常的问题
使用JDBC检索MySQL数据库,如果遇到timestamp字段的值为空,那么会立即报出异常: ### Error querying database. Cause: java.sql.SQLExc ...
- 洛谷-三连击(升级版)-BOSS战-入门综合练习1
题目描述 Description 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成A:B:C的比例,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. 输入输出格 ...
- HTTP基础知识
HTTP是计算机通过网络进行通信的规则,是一种无状态的协议,不建立持久的连接(客户端向服务器发送请求,web服务器返回响应,接着连接就被关闭了): 一个完整的HTTP请求连接,通常有下面7个步骤: 1 ...
- 转载-ACPI的知识
ACPI – the Advanced Configuration & Power Interface. ACPI是OS,BIOS和硬件之间的抽象层.它允许OS和平台独立的发展,比如新的OS可 ...
- void与void*详解
void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void ...
- git(创建,提交,回退)
创建版本库 2334次阅读 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以 ...
- 很好的容斥思想 HDU 5514
题目描述:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条a[i]个石头,问最后所有青蛙跳过的石头的下标总和是多少? 思路:经过绘图我们发现,每次跳过的位置一定是k*gcd(a[i], m).然 ...
- Python 协程/异步IO/Select\Poll\Epoll异步IO与事件驱动
1 Gevent 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...
- 笨方法学python--第一个程序
该章主要知识点有: 1 print 打印,有双引号,单引号 2 分析报错信息,积累经验 3 # -*- coding:utf-8 -*-,可以输出汉字 4 井号,# ,注释, 英文名 octothor ...