LianjiaTech / retrofit-spring-boot-starter

A spring-boot starter for retrofit, supports rapid integration and feature enhancements.(适用于retrofit的spring-boot-starter,支持快速集成和功能增强)
Apache License 2.0
1.77k stars 339 forks source link

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

Open XW512 opened 1 year ago

XW512 commented 1 year ago

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

chentianming11 commented 1 year ago

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

XW512 commented 1 year ago

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

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

XW512 commented 1 year ago

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

如果使用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 commented 1 year ago

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

XW512 commented 1 year ago

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

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

chentianming11 commented 1 year ago

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

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

XW512 commented 1 year ago

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

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

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

chentianming11 commented 1 year ago

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

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

XW512 commented 1 year ago

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

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

好的,我试下,感谢感谢

chentianming11 commented 1 year ago

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

XW512 commented 1 year ago

如果还是不行,也可以考虑使用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()方法