先说背景,是这样的。我们用的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下的微服务间都能正常通信。

修改启动类配置如下后,通信正常:

推荐这篇博客看一下:

https://www.cnblogs.com/qiaoyutao/p/9813069.html

https://www.cnblogs.com/zhucww/p/10517089.html

Logo

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

更多推荐