Feign 与 Hystrix

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Feign 与 Hystrix相关的知识,希望对你有一定的参考价值。

参考技术A Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud
整合了Ribbon和Eureka,从而为我们提供了一个负载均衡的Http客户端。

首先我们引入Feign的依赖,由于Feign要通过Eureka去获取服务,所以也要引入Eureka-client:

然后再Spring Boot启动类上打上 @EnableFeignClients 注解,使得应用可以使用FeignClient,如下:

最后编写远程调用接口,调用上一篇中提到的Order服务,如下:

其中, @FeignClient 指明这个接口是一个FeignClient,value值是我们要从eureka注册中心获取的服务,由于eureka-client-order项目中
的 spring.application.name 是SERVICE-ORDER,所以我们这里写SERVICE-ORDER。

我们再写个controller使用Feign去调用远程服务,如下:

最后,我们修改一下eureka-client-order,启动两个服务,两个服务的订单状态不同,如下:

大功告成,我们启动4个服务:eureka注册中心,order-node-1,order-node-2,feign。访问我们的controller,并刷新,显示结果如下:

说明feign的负载均衡已经启用。

首先我们引入Hystrix的依赖:

并启用Feign的Hystrix,

Feign封装了所有方法的熔断方法,Hystrix支持fallback的概念,在FeignClien中指定即可

指定fallback的类为OrderHystrix,我们新建OrderHystrix类并实现RemoteOrder接口:

这样我们在调用远程的/order/detail时,如果发生超时或者错误,就会调用 getRemoteOrder() 方法。
我们可以把eureka-client-order的两个服务都停掉,然后进行访问,结果如下:

说明熔断机制起作用了。

项目示例地址: https://github.com/liubo-tech/spring-cloud-eureka 。

以上是关于Feign 与 Hystrix的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Feign:Feign与RestTemplate相比是不是足够高效?

Spring Cloud Feign服务通信与负载均衡机制

Feign 与 Hystrix

Feign 与 OpenFeign

SpringCloud + Zookeeper + Feign整合及Feign原理

Spring Cloud ---- 服务消费与负载均衡(feign)