之前,我们使用了 Ribbon 的负载均衡功能,简化了远程调用时的代码:
这貌似已经非常简化了,
但是以后肯定会有很多的方法,
那岂不是每个方法都要写上一段这个代码?(就改一下参数)
那么有没有什么办法来优化一下呢?有!就是我们接下来要学的:Feign
Feign 的英文意思是伪装,功能当然也和伪装有关:
Feign 可以把 Rest 的请求进行隐藏,伪装成类似SpringMVC的Controller一样。
我们就不用再自己去 拼接url、拼接参数 等操作,一切都交给Feign去做。
下面我们来个Feign的快速入门使用:
改造一下服务调用方 yuanxion-service-consumer
1. 引入启动器:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.修改配置。 默认配置即可,不用修改。
3.在引导类上加注解:
因为Feign 内部有 RestTemplate,所以不用我们自己创建,注释掉:
然后把controller里 原来的方法都注释的:
注释掉之后,我们来用 Feign 的方法:
1.创建一个接口:
2.在接口上加上@FeignClient注解,并指定 要作用的微服务名:
3.写上要调用的接口
我们这里要调用的是 服务提供方里 UserController 里的 queryUserById 方法
这样我们就可以使用了,回到controller里去,继续改造(注入UserClient,然后调用 即可):
然后重启 服务调用方 consumer的服务,访问http://localhost/consumer/user?id=1,看看是否也能调用服务提供方的服务:
可以调用!
Feign我们就使用成功了!
负载均衡
因为Feign中本身已经集成了Ribbon依赖和自动配置
所以不需要我们额外引入依赖,也不需要注册RestTemplate对象。
Hystrix
Feign中也默认集成了Hystrix
不过,默认情况是关闭的,我们需要在 服务提供方里 的配置里 ,覆盖默认配置 来开启:
开启后就可以使用Hystrix了:
想熔断哪个方法,我们只需去创建一个类,然后去实现相应的接口 :
然后定义熔断时的操作:
然后我们需要把这个熔断类 告诉 Feign :
当然,别忘了将 刚刚创建的这个类 注入容器:
这样,我们就可以使用了!
下面我们来试试:
关闭 服务提供方 provider 的服务,重启 服务调用方 consumer 的服务,然后访问 http://localhost/consumer/user?id=1 看看
Feign里的 Hystrix 熔断 我们也就使用成功了!