springcloud,通过fegin调用其他子服务,直接被熔断,走fullback的问题
先说背景,是这样的。我们用的springcloud,做了微服务。我的启动类,所在的目录如下:大部分都是直接在com.lenovoedu目录下,而有的是在com.lenovoedu的子目录下。比如com.lenovoedu.newexam等。我启动类的配置如下,所有的微服务都一样:问题就出在这里,只要启动类是直接在com.lenovoedu下面的,就能正常跟其他子...
先说背景,是这样的。我们用的springcloud,做了微服务。
我的启动类,所在的目录如下:
大部分都是直接在com.lenovoedu目录下,而有的是在com.lenovoedu的子目录下。比如com.lenovoedu.newexam等。
我启动类的配置如下,所有的微服务都一样:
问题就出在这里,只要启动类是直接在com.lenovoedu下面的,就能正常跟其他子服务进行通信。只要是在com.lenovoedu的子目录下的,就会直接被熔断,然后直接fullback.我的fullback如下,是自己定义的异常,直接抛出。
但是这样是看不到具体的异常信息的。再次,教大家一招,在fullback里直接抛出RunTimeException。你就能看到具体的异常信息了。如下:
然后我的异常信息如下:
猛一看,空指针。我去这不是客户端没有被注入吗。然后,肯定是没有扫描到啊。
但是我@ComponentScan(basePackages = {"com.lenovoedu"})配置了呀。
于是开始研究@ComponentScan和@EnableFeignClients的扫描。
@ComponentScan:此注解是用来管理容器中的bean,即是管理项目中类的依赖关系, 注意此注解并不创建类的实例; 默认情况下此注解扫描本工程下的所有包
@EnableFeignClients: 此注解的作用是扫描标记了@FeignClient的接口并创建实例bean,默认扫描并创建所在工程下的包。如果在springBoot的分布式中需要用到别的微服务的工程的接口实例,就需要单独配置。如果我的类都是在com.lenovoedu下,那么不单独配置也是可以的。所以才会出现文中刚开始说的问题,只要是在启动类直接在com.lenovoedu下的微服务间都能正常通信。
修改启动类配置如下后,通信正常:
推荐这篇博客看一下:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)