【已解决】Requested bean is currently in creation: Is there an unresolvable circular reference?

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 工作小总结
  • 时间:2022-10-27 18:52
  • 4700人已阅读
简介 在sentinel整合Feign的时候错误提示:循环依赖问题 【已解决】sentinel整合feign出现spring的bean循环依赖问题

🔔🔔好消息!好消息!🔔🔔

 如果您需要注册ChatGPT,想要升级ChatGPT4。凯哥可以代注册ChatGPT账号代升级ChatGPT4

有需要的朋友👉:微信号 kaigejava2022

在sentinel整合Feign的时候错误提示:循环依赖问题

【已解决】sentinel整合feign出现spring的bean循环依赖问题

在正常情况下order服务调用user服务正常。引入feign后将调用feign相关的抽取到了feign-api项目中.然后启动就报错。错误信息如下:

d12e08553da8880b25cdbf3420c94a74.png

事故现场回顾:

使用的时候sentinel整合Feign.order和user服务之前使用feign调用正常。在整合sentinel的时候,出现上图问题。

sentinel整合Feign步骤:

一:在服务调用方的配置文件中添加feign开启sentinel服务

本案例中是order调用user服务。所以,也就是需要在order服务的application.yml添加:

feign:
  sentinel:
    enabled: true # 开启feign对sentinel的支持

9c23713f7c5f8c47a60813741b2d0272.png

二:编写失败降级逻辑

业务失败后,不能直接报错,而应该返回用户一个友好提示或者默认结果,这个就是失败降级逻辑。

给FeignClient编写失败后的降级逻辑

①方式一:FallbackClass,无法对远程调用的异常做处理

②方式二:FallbackFactory,可以对远程调用的异常做处理,我们选择这种

这里我们演示方式二的失败降级处理。

f68271001838d55c14e67c8a99613ed8.png

三:在feing-api项目中的UserClient接口中使用UserClientFallbackFactory

0923f2f7a6f35e20e2718cbb3967a07f.png

四:启动类上添加如下:

463bb5415ac3ed1c0fe45a4708b3a1e1.png

重启服务,然后就报错了。

从网上查询,有说bean的加载顺序错误。修改后就可以了。如下图:

010940796dabb1bf33b690ea095a8fb4.png

凯哥也这么来,不行。

还有说对应的server添加@Lazy注解,让其延时加载。如下图:

f8d8d394059e59ad6bd135e2307cbb19.png

难道无解决办法了吗?

先来看看凯哥的服务版本:

Spring Boot 版本为:2.3.8.RELEASE

Spring Cloud 版本为:Hoxton.SR10

Spring Cloud Alibaba 版本为:2.2.5.RELEASE

Spring Cloud Gateway:2.2.5.RELEASE

我们去spring官网https://spring.io/projects/spring-cloud 查找spring cloud Hoxton版本对应关系:

找到对应的Hoxton.SR10对应各个版本依赖:

ea7a2edba807767a1d5b29a9d88c220a.png

我们可以看到,虽然Hoxton.SR10对spring boot的支持是2.2.x<spring boot<2.3.x

凯哥使用的是spring boot的2.3.5版本符合当前SR10的要求。BUT,SR10的GateWay支持的版本是2.2.7.RELEASE。可是凯哥使用的GateWay版本是2.2.5.RELEASE。版本对应不上啊。噗噗。(一口老血喷出啊~~~)

那么,接着在spring 官网找到支持GateWay是2.2.5的。发现SR8是支持的。如下图:

467f6d153260879a7e0f28733607eb9b.png

果断换上试试。

2fd93d1b91eb1c9c055c67b47f16b8d0.png

刷新maven依赖后,重启服务。一起OK。

小总结:

spring cloud的版本及对应的spring Boot\GateWay等其他组件的版本关系,最好以官网的为准。不然,就会像凯哥这样,浪费一两个小时。ε=(´ο`*)))唉


TopTop