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})

posted @ 2023-06-21 16:04  佛系粥米  阅读(87)  评论(0编辑  收藏  举报