3千字详细讲解OpenFeign的使用姿势( 二 )
然后再用消费者工程的ConsumerController接口来测试 。
@RestControllerpublic class ConsumerController { //引入Feign客户端@Resourceprivate ProviderClient providerClient;@RequestMapping("/consumer/callProvider")public String callProvider() {//使用Feign客户端调用其他服务的接口return providerClient.list();}}
最后我们启动提供者工程 , 消费者工程 , 注册中心 , 测试 。
文章插图
然后调用消费者的ConsumerController接口 。
文章插图
三、继承式细心的同学可能发现 , 其实声明式会写多一次提供者接口的定义 , 也就是有重复的代码 , 既然有重复的定义 , 那我们就可以抽取出来 , 所以就有了继承式 。
第一步 , 创建一个普通的Maven项目api工程 , 把接口定义在api中 。
文章插图
第二步 , 服务提供者工程的ProviderController实现Provider接口 。
@RestControllerpublic class ProviderController implements ProviderApi {public String list() {List list = new ArrayList<>();list.add("java技术爱好者");list.add("SpringCloud");list.add("没有人比我更懂了");return list.toString();}}
第三步 , 消费者工程的ProviderClient无需定义 , 只需要继承ProviderApi , 然后加上@FeignClient即可 。
@FeignClient(name = "provider")public interface ProviderClient extends ProviderApi {}
其他不用变了 , 最后启动服务提供者 , 消费者 , 注册中心测试一下 。
文章插图
测试成功!上面继承式的好处就在于 , 只需要在api工程定义一次接口 , 服务提供者去实现具体的逻辑 , 消费者则继承接口贴个注解即可 , 非常方便快捷 。
缺点就在于如果有人动了api的接口 , 则会导致很多服务消费者、提供者出现报错 , 耦合性比较强 。 api工程相当于一个公共的工程 , 消费者和服务者都会依赖此工程 , 所以一般要求不能随便删api上面的接口 。
四、Feign的相关配置下面讲一下Feign的一些常用的相关配置 。
4.1 请求超时设置Feign底层其实还是使用Ribbon , 默认是1秒 。 所以超过1秒就报错 。
接下来试验一下 。 我在服务提供者的接口加上一段休眠1.5秒的代码 , 然后用消费者去消费 。
@RestControllerpublic class ProviderController implements ProviderApi {public String list() {List list = new ArrayList<>();list.add("java技术爱好者");list.add("SpringCloud");list.add("没有人比我更懂了");try {//休眠1.5秒Thread.sleep(1500);} catch (Exception e) {e.printStackTrace();}return list.toString();}}
消费者调用后 , 由于超过1秒 , 可以看到控制台报错 。
文章插图
如果想调整超时时间 , 可以在消费者这边 , 加上配置:
ribbon:ReadTimeout:5000 #请求时间5秒ConnectTimeout: 5000 #连接时间5秒
为了显示出效果 , 我们在消费者的代码里加上耗时计算:
@RestControllerpublic class ConsumerController {@Resourceprivate ProviderClient providerClient;@RequestMapping("/consumer/callProvider")public String callProvider() throws Exception {long star = System.currentTimeMillis();String list = providerClient.list();long end = System.currentTimeMillis();return "响应结果:" + list + ",耗时:" + (end - star) / 1000 + "秒";}}
推荐阅读
- AirPods Max是如何低功耗运作的,来看详细说明
- 超好用的UnixLinux 命令技巧 大神为你详细解读
- 华为nova8系列详细配置曝光:66W快充+麒麟985芯片
- 放映机|NEC激光家族上线,实力讲解影院生存之路
- Python中字符串有哪些常用操作?纯干货超详细
- Corona6.1超详细安装步骤,全汉化最新CR版本
- 如何将电脑内容显示到投影仪或电视上?详细教程奉上
- 值得为了8K升级吗?天龙AVR-X4700H详细试用
- 老罗推荐的确有料,野小兽智能水阻划船机详细体验
- 程序员面试题:Leetcode真题讲解,求两数之和