10-Feign-最佳实践分析
1.Feign的最佳实践:
方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。
服务紧耦合
父接口参数列表中的映射不会被继承下来
Spring官方不推荐这种方式:
我们一般不推荐去共享接口在服务端和客户端之间,提供者就是服务端,调用者就是客户端。因为他会造成紧耦合,因为userservice和orderservice都实现相同接口了。并且这种继承方案对SpringMVC是不起作用的。因为方法的参数是继承不下来的。
方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用
解释:
比如有一个user-service,里面有一个UserController,这个controller对外暴露了查询用户的接口,现在有两个微服务order-service和pay-service,这两假设都要去查询用户,以前是你写你的UserClient,我写我的UserClient,然后都来调用。但是如果说将来我们的微服务越来越多,大家都来调user-service,这个client等于写了十多遍。这样太浪费了。怎么办?
都别写了。服务提供者写好接口以后你们不是要调接口吗,我帮你们写,我准备一个Fei