Feign的最佳实践
Feign的最佳实践
方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。
orderservice中的UserClient和userservice的Controller中的queryById基本相同,因此可以定义父接口作为统一标准
但是Feign官方不推荐提供者和消费者共用接口,会造成紧耦合。此外对SpringMVC不起作用,Controller中还是需要自己实现业务逻辑。
方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。
比如有多个服务如orderservice和payservice都需要获取用户信息,都分别定义UserClient调用userservice的服务。可以将该UserClient抽取为独立模块。
但是存在有些服务需要的FeignClient模块不多,却需要引入配置中的所有FeignClient模块。
实现抽取FeignClient的步骤:
1、 首先创建一个module,命名为feign-api,然后引入feign的starter依赖
2、将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
3、在order-service中引入feign-api的依赖
4、修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
5、重启测试
当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决:
方式一:指定FeignClient所在包【所有都扫】
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")
方式二:指定FeignClient字节码【只加载指定】
@EnableFeignClients(clients = {UserClient.class})