Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

retrofit能和openfeign一起在一个项目中使用,全局熔断策略不生效 #149

Open
XW512 opened this issue Mar 18, 2023 · 11 comments

Comments

@XW512
Copy link

XW512 commented Mar 18, 2023

由于框架余留问题,我想问下,retrofit能和openfeign一起在一个项目中使用吗?我测试了下,发现好像全局熔断策略不生效

@chentianming11
Copy link
Collaborator

理论上可以一起使用。另外,你的全局熔断策略是如何配置的?

@XW512
Copy link
Author

XW512 commented Mar 20, 2023

理论上可以一起使用。另外,你的全局熔断策略是如何配置的?

你好,我是这样配置的:
retrofit:
degrade:
degrade-type: sentinel
global-sentinel-degrade:
enable: true
count: 1
time-window: 3
我为了看到效果,所以把count设置为了 1
版本是2.3.11

@XW512
Copy link
Author

XW512 commented Mar 21, 2023

理论上可以一起使用。另外,你的全局熔断策略是如何配置的?

如果使用openfeign+sentinel使用,sentinel的熔断配置放到nacos的配置中心中,就会出现retrofit的全局熔断策略不生效,如:
我找到原因了,如果openfeign+sentinel中sentinel的熔断配置放到nacos中去,retrofit的熔断就不会生效,如:
spring:
cloud:
sentinel:
eager: true
datasource:
ds1:
nacos:
username: nacos
password: 123456
server-addr: 127.0.0.1:8848
namespace: ${spring.application.name}
data-id: ${spring.application.name}-sentinel
group-id: blue
data-type: json
rule-type: degrade

@chentianming11
Copy link
Collaborator

我的实现里面也有问题,主要是DegradeRuleManager.loadRules(rules)只能一次加载,后续会进行修复。

@XW512
Copy link
Author

XW512 commented Mar 21, 2023

我的实现里面也有问题,主要是DegradeRuleManager.loadRules(rules)只能一次加载,后续会进行修复。

大佬,预计什么时候会修复这个问题呀

@chentianming11
Copy link
Collaborator

今天会修复,但是你这个问题,不一定这个修复能解决的。

因为nacos中配置的sentinel配置可能会覆盖掉我们这个组件的配置。这种情况下,我理解只需要将所有的sentinel配置都放在nacos里面就行。

@XW512
Copy link
Author

XW512 commented Mar 21, 2023

今天会修复,但是你这个问题,不一定这个修复能解决的。

因为nacos中配置的sentinel配置可能会覆盖掉我们这个组件的配置。这种情况下,我理解只需要将所有的sentinel配置都放在nacos里面就行。

这个是不是可以做成配置化优先级,比如 retrofit的熔断可配置成优先使用,openfeign整合sentinel的熔断放到后面进行处理

@chentianming11
Copy link
Collaborator

你升级看看能否解决吧,2.3.13

你上面说的这个方案无法控制的,因为组件里面根本不知道openfeign整合sentinel的熔断是怎么做的。

@XW512
Copy link
Author

XW512 commented Mar 22, 2023

你升级看看能否解决吧,2.3.13

你上面说的这个方案无法控制的,因为组件里面根本不知道openfeign整合sentinel的熔断是怎么做的。

好的,我试下,感谢感谢

@chentianming11
Copy link
Collaborator

如果还是不行,也可以考虑使用resilience4j熔断

@XW512
Copy link
Author

XW512 commented Mar 22, 2023

如果还是不行,也可以考虑使用resilience4j熔断

我使用sentinel主要是它的可观测性,我觉得是不是可以
Set ruleSet = new HashSet<>(DegradeRuleManager.getRules());
for (DegradeRule rule : this.rules) {
if (rule == null) {
continue;
}
rule.setResource(resourceName);
ruleSet.add(rule);
}
DegradeRuleManager.loadRules(new ArrayList<>(ruleSet));
在这个方法中添加restrofit的熔断策略,先获取现有的,然后添加retrofit的策略,我发现2.3.13中的DegradeRuleManager.setRuleForResource()方法是不是不能生效,但是我通过sentinel的控制台进行熔断retrofit的请求,发现是可以熔断的,而且参数是一模一样的,调用loadRules()方法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants