之前,我们使用了 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 熔断 我们也就使用成功了!