java - Resilience4j.retry 异常不工作
问题描述
我正在使用弹性4j.retry和弹性4j .断路器。Service1
正在调用另一个Service2
可能引发异常的服务。即使我遇到异常,我也应该尝试连接至少定义的次数waitDuration * maxRetryAttempts
。
服务 1 ---> 调用 ---> 服务 2
应用程序.yml
resilience4j.retry:
instances:
service1:
maxRetryAttempts: 4
waitDuration: 1000 #ms
retryExceptions:
- org.apache.http.conn.HttpHostConnectException
- org.apache.thrift.TException
- java.net.ConnectException
Service1Repository.java
Service2Response response = CircuitBreaker.decorateSupplier(circuitBreaker,
Retry.decorateSupplier(retry, () -> {
try {
return service2.getdata(params);
} catch (TException e) {
log.error("msg", e);
throw new Service1Exception("msg", e);
}
})
).get();
但是,当Service2
它关闭时,它不会重试(最多 4 次,每次应该在 1000 毫秒后发生)我会null
立即得到响应(在我的情况下)。我尝试增加值(10000ms),还是一样。我看到打印了日志,但服务应该等待waitDuration * maxRetryAttempts
是否Serviece2
关闭。
解决方案
如果要捕获已检查的异常,则必须使用decorateCallable
.
推荐阅读
- python - pandas.apply 函数返回
我正在尝试以这种方式将数据框中的时间戳转换为字符串日期:
def ts_to_date(ts): return str(ts.date) display(table["event_date_and_time"].apply(ts_to_date))
问题是生成的 pandas serie 填充了
- r - 检测包含和排除特定单词的字符串(使用 stringr 包)
- powershell - 从 pester 中的属性文件中读取值
- php - 从 MYSQL 获取日期范围内的记录 - PHP
- php - 创建一个对象并将其添加到 json 以保存文件
- python - 如何在python中显示重复项?
- angular - 带有方法的对象上的打字稿spad运算符
- rest - 如何从 REST API 中的 Firestore 文档中查询单个字段?
- jquery - jQuery Multislect 框序列化搜索框,而不是实际选择
- ios - UIButton 在点击时更改背景(以编程方式)