Skip to content

Commit fc963f5

Browse files
全局熔断降级
1 parent c1f88b8 commit fc963f5

23 files changed

+614
-186
lines changed

README.md

Lines changed: 93 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -169,32 +169,73 @@ retrofit:
169169
- com.github.lianjiatech.retrofit.spring.boot.core.BodyCallAdapterFactory
170170
- com.github.lianjiatech.retrofit.spring.boot.core.ResponseCallAdapterFactory
171171

172-
# 日志打印配置
173-
log:
172+
# 全局日志打印配置
173+
global-log:
174174
# 启用日志打印
175-
enable-global-log: true
175+
enable: true
176176
# 全局日志打印级别
177-
global-log-level: info
177+
log-level: info
178178
# 全局日志打印策略
179-
global-log-strategy: basic
179+
log-strategy: basic
180180

181181
# 重试配置
182-
retry:
182+
global-retry:
183183
# 是否启用全局重试
184-
enable-global-retry: false
184+
enable: false
185185
# 全局重试间隔时间
186-
global-interval-ms: 100
186+
interval-ms: 100
187187
# 全局最大重试次数
188-
global-max-retries: 2
188+
max-retries: 2
189189
# 全局重试规则
190-
global-retry-rules:
190+
retry-rules:
191191
- response_status_not_2xx
192192
- occur_io_exception
193193

194194
# 熔断降级配置
195195
degrade:
196196
# 熔断降级类型。默认none,表示不启用熔断降级
197197
degrade-type: none
198+
# 全局sentinel降级配置
199+
global-sentinel-degrade:
200+
# 是否开启
201+
enable: false
202+
# 各降级策略对应的阈值。平均响应时间(ms),异常比例(0-1),异常数量(1-N)
203+
count: 1000
204+
# 熔断时长,单位为 s
205+
time-window: 5
206+
# 降级策略(0:平均响应时间;1:异常比例;2:异常数量)
207+
grade: 0
208+
209+
# 全局resilience4j降级配置
210+
global-resilience4j-degrade:
211+
# 是否开启
212+
enable: false
213+
# 滑动窗口的类型
214+
sliding-window-type: count_based
215+
# 窗口的大小
216+
sliding-window-size: 100
217+
# 在单位窗口内最少需要几次调用才能开始进行统计计算
218+
minimum-number-of-calls: 100
219+
# 单位时间窗口内调用失败率达到多少后会启动断路器
220+
failure-rate-threshold: 50
221+
# 允许断路器自动由打开状态转换为半开状态
222+
enable-automatic-transition-from-open-to-half-open: true
223+
# 在半开状态下允许进行正常调用的次数
224+
permitted-number-of-calls-in-half-open-state: 10
225+
# 断路器打开状态转换为半开状态需要等待秒数
226+
wait-duration-in-open-state-seconds: 60
227+
# 指定断路器应保持半开多长时间的等待持续时间,可选配置,大于1才是有效配置。
228+
max-wait-duration-in-half-open-state-seconds: 0
229+
# 忽略的异常类列表,只有配置值之后才会加载。
230+
ignore-exceptions: []
231+
# 记录的异常类列表,只有配置值之后才会加载。
232+
record-exceptions: []
233+
# 慢调用比例阈值
234+
slow-call-rate-threshold: 100
235+
# 慢调用阈值秒数,超过该秒数视为慢调用
236+
slow-call-duration-threshold-seconds: 60
237+
# 启用可写堆栈跟踪的标志
238+
writable-stack-trace-enabled: true
198239

199240
# 全局连接超时时间
200241
global-connect-timeout-ms: 10000
@@ -204,6 +245,7 @@ retrofit:
204245
global-write-timeout-ms: 10000
205246
# 全局完整调用超时时间
206247
global-call-timeout-ms: 0
248+
207249
```
208250

209251
## 高级功能
@@ -404,14 +446,14 @@ public interface HttpApi {
404446

405447
```yaml
406448
retrofit:
407-
# 日志打印配置
408-
log:
449+
# 全局日志打印配置
450+
global-log:
409451
# 启用日志打印
410-
enable-global-log: true
452+
enable: true
411453
# 全局日志打印级别
412-
global-log-level: info
454+
log-level: info
413455
# 全局日志打印策略
414-
global-log-strategy: basic
456+
log-strategy: basic
415457
```
416458

417459
**4种日志打印策略含义如下**:
@@ -438,16 +480,16 @@ retrofit:
438480
全局重试默认关闭。开启之后,所有`HTTP`请求都会按照配置参数自动重试,默认配置项如下:
439481

440482
```yaml
441-
# 重试配置
442-
retry:
483+
# 全局重试配置
484+
global-retry:
443485
# 是否启用全局重试
444-
enable-global-retry: false
486+
enable: false
445487
# 全局重试间隔时间
446-
global-interval-ms: 100
488+
interval-ms: 100
447489
# 全局最大重试次数
448-
global-max-retries: 2
490+
max-retries: 2
449491
# 全局重试规则
450-
global-retry-rules:
492+
retry-rules:
451493
- response_status_not_2xx
452494
- occur_io_exception
453495
```
@@ -491,6 +533,21 @@ retrofit:
491533
</dependency>
492534
```
493535

536+
通过以下配置可开启全局sentinel熔断降级:
537+
538+
```yaml
539+
retrofit:
540+
# 熔断降级配置
541+
degrade:
542+
# 熔断降级类型。默认none,表示不启用熔断降级
543+
degrade-type: sentinel
544+
# 全局sentinel降级配置
545+
global-sentinel-degrade:
546+
# 是否开启
547+
enable: true
548+
# ...其他sentinel全局配置
549+
```
550+
494551
#### resilience4j熔断降级
495552

496553
配置`degrade-type=resilience4j`开启。然后在相关接口或者方法上声明`@Resilience4jDegrade`即可。另外项目需要自行引入`resilience4j`依赖。
@@ -504,6 +561,21 @@ retrofit:
504561
</dependency>
505562
```
506563

564+
通过以下配置可开启全局resilience4j熔断降级:
565+
566+
```yaml
567+
retrofit:
568+
# 熔断降级配置
569+
degrade:
570+
# 熔断降级类型。默认none,表示不启用熔断降级
571+
degrade-type: resilience4j
572+
# 全局resilience4j降级配置
573+
global-resilience4j-degrade:
574+
# 是否开启
575+
enable: true
576+
# ...其他resilience4j全局配置
577+
```
578+
507579
#### 扩展熔断降级
508580

509581
如果用户需要使用其他的熔断降级实现,继承`BaseRetrofitDegrade`,并将其配置`bean`即可,具体可参考`SentinelRetrofitDegrade`。

src/main/java/com/github/lianjiatech/retrofit/spring/boot/config/DegradeProperty.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/main/java/com/github/lianjiatech/retrofit/spring/boot/config/LogProperty.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/main/java/com/github/lianjiatech/retrofit/spring/boot/config/RetrofitAutoConfiguration.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,13 @@ public ErrorDecoderInterceptor errorDecoderInterceptor() {
121121
@Bean
122122
@ConditionalOnMissingBean
123123
public RetryInterceptor retryInterceptor() {
124-
return new RetryInterceptor(retrofitProperties.getRetry());
124+
return new RetryInterceptor(retrofitProperties.getGlobalRetry());
125125
}
126126

127127
@Bean
128128
@ConditionalOnMissingBean
129129
public LoggingInterceptor logInterceptor() {
130-
return new LoggingInterceptor(retrofitProperties.getLog());
130+
return new LoggingInterceptor(retrofitProperties.getGlobalLog());
131131
}
132132

133133
@Bean
@@ -147,15 +147,16 @@ ServiceChooseInterceptor serviceChooseInterceptor(@Autowired ServiceInstanceChoo
147147
@ConditionalOnClass(name = "com.alibaba.csp.sentinel.SphU")
148148
@ConditionalOnProperty(name = "retrofit.degrade.degrade-type", havingValue = RetrofitDegrade.SENTINEL)
149149
public RetrofitDegrade sentinelRetrofitDegrade() {
150-
return new SentinelRetrofitDegrade();
150+
return new SentinelRetrofitDegrade(retrofitProperties.getDegrade().getGlobalSentinelDegrade());
151151
}
152152

153153
@Bean
154154
@ConditionalOnMissingBean
155155
@ConditionalOnClass(name = "io.github.resilience4j.circuitbreaker.CircuitBreaker")
156156
@ConditionalOnProperty(name = "retrofit.degrade.degrade-type", havingValue = RetrofitDegrade.RESILIENCE4J)
157157
public RetrofitDegrade resilience4jRetrofitDegrade() {
158-
return new Resilience4jRetrofitDegrade(CircuitBreakerRegistry.ofDefaults());
158+
return new Resilience4jRetrofitDegrade(CircuitBreakerRegistry.ofDefaults(),
159+
retrofitProperties.getDegrade().getGlobalResilience4jDegrade());
159160
}
160161

161162
@Bean

src/main/java/com/github/lianjiatech/retrofit/spring/boot/config/RetrofitProperties.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import com.github.lianjiatech.retrofit.spring.boot.core.BasicTypeConverterFactory;
1010
import com.github.lianjiatech.retrofit.spring.boot.core.BodyCallAdapterFactory;
1111
import com.github.lianjiatech.retrofit.spring.boot.core.ResponseCallAdapterFactory;
12+
import com.github.lianjiatech.retrofit.spring.boot.degrade.DegradeProperty;
13+
import com.github.lianjiatech.retrofit.spring.boot.log.GlobalLogProperty;
14+
import com.github.lianjiatech.retrofit.spring.boot.retry.GlobalRetryProperty;
1215

1316
import lombok.Data;
1417
import retrofit2.CallAdapter;
@@ -32,11 +35,11 @@ public class RetrofitProperties {
3235
private Map<String, PoolConfig> pool = new LinkedHashMap<>();
3336

3437
/**
35-
* 重试配置
38+
* 全局重试配置
3639
* retry config
3740
*/
3841
@NestedConfigurationProperty
39-
private RetryProperty retry = new RetryProperty();
42+
private GlobalRetryProperty globalRetry = new GlobalRetryProperty();
4043

4144
/**
4245
* 熔断降级配置
@@ -46,11 +49,11 @@ public class RetrofitProperties {
4649
private DegradeProperty degrade = new DegradeProperty();
4750

4851
/**
49-
* 日志配置
52+
* 全局日志配置
5053
* log config
5154
*/
5255
@NestedConfigurationProperty
53-
private LogProperty log = new LogProperty();
56+
private GlobalLogProperty globalLog = new GlobalLogProperty();
5457

5558
/**
5659
* 全局连接超时时间
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.github.lianjiatech.retrofit.spring.boot.degrade;
2+
3+
import org.springframework.boot.context.properties.NestedConfigurationProperty;
4+
5+
import com.github.lianjiatech.retrofit.spring.boot.degrade.resilience4j.GlobalResilience4jDegradeProperty;
6+
import com.github.lianjiatech.retrofit.spring.boot.degrade.sentinel.GlobalSentinelDegradeProperty;
7+
8+
import lombok.Data;
9+
10+
/**
11+
* @author 陈添明
12+
*/
13+
@Data
14+
public class DegradeProperty {
15+
16+
/**
17+
* 熔断降级类型。默认none,表示不启用熔断降级
18+
*/
19+
private String degradeType = RetrofitDegrade.NONE;
20+
21+
/**
22+
* 全局Sentinel降级配置
23+
*/
24+
@NestedConfigurationProperty
25+
private GlobalSentinelDegradeProperty globalSentinelDegrade = new GlobalSentinelDegradeProperty();
26+
27+
/**
28+
* 全局Resilience4j降级配置
29+
*/
30+
@NestedConfigurationProperty
31+
private GlobalResilience4jDegradeProperty globalResilience4jDegrade = new GlobalResilience4jDegradeProperty();
32+
}

0 commit comments

Comments
 (0)