前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【已解决】Requested bean is currently in creation: Is there an unresolvable circular reference?

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

作者头像
凯哥Java
发布2022-12-16 20:06:41
4.6K0
发布2022-12-16 20:06:41
举报
文章被收录于专栏:凯哥Java凯哥Java

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

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

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

d12e08553da8880b25cdbf3420c94a74.png
d12e08553da8880b25cdbf3420c94a74.png

事故现场回顾:

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

sentinel整合Feign步骤:

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

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

代码语言:javascript
复制
feign:
  sentinel:
    enabled: true # 开启feign对sentinel的支持
9c23713f7c5f8c47a60813741b2d0272.png
9c23713f7c5f8c47a60813741b2d0272.png

二:编写失败降级逻辑

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

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

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

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

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

f68271001838d55c14e67c8a99613ed8.png
f68271001838d55c14e67c8a99613ed8.png

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

0923f2f7a6f35e20e2718cbb3967a07f.png
0923f2f7a6f35e20e2718cbb3967a07f.png

四:启动类上添加如下:

463bb5415ac3ed1c0fe45a4708b3a1e1.png
463bb5415ac3ed1c0fe45a4708b3a1e1.png

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

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

010940796dabb1bf33b690ea095a8fb4.png
010940796dabb1bf33b690ea095a8fb4.png

凯哥也这么来,不行。

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

f8d8d394059e59ad6bd135e2307cbb19.png
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
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
467f6d153260879a7e0f28733607eb9b.png

果断换上试试。

2fd93d1b91eb1c9c055c67b47f16b8d0.png
2fd93d1b91eb1c9c055c67b47f16b8d0.png

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

小总结:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档