Feign 与 Hystrix

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

一、Feign的使用

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

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>

  

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

@SpringBootApplication
@EnableFeignClients
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }

  

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

@FeignClient(value = "SERVICE-ORDER")
public interface RemoteOrder { @RequestMapping("/order/detail")
Order getRemoteOrder();
}

  

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

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

@RestController
@RequestMapping("feign")
public class FeignController {
@Autowired
private RemoteOrder remoteOrder; @RequestMapping("order")
public Order feignOrder(){
return remoteOrder.getRemoteOrder();
}
}

  

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

spring:
profiles: node-1
server:
port: 8100
order:
status: '已付款' ---
spring:
profiles: node-2
server:
port: 8300
order:
status: '未支付'

  

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

{"id":123123,"totalPrice":87.98,"orderStatus":"已付款"}

{"id":123123,"totalPrice":87.98,"orderStatus":"未支付"}

  

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

二、Hystrix熔断

首先我们引入Hystrix的依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

  

并启用Feign的Hystrix,

feign:
hystrix:
enabled: true

  

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

@FeignClient(value = "SERVICE-ORDER",fallback = OrderHystrix.class)
public interface RemoteOrder { @RequestMapping("/order/detail")
Order getRemoteOrder();
}

  

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

@Service
public class OrderHystrix implements RemoteOrder {
@Override
public Order getRemoteOrder() {
Order order = new Order();
order.setOrderStatus("熔断order");
return order;
}
}

  

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

{"id":,"totalPrice":87.98,"orderStatus":"熔断order"}

说明熔断机制起作用了。

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

Feign 与 Hystrix的更多相关文章

  1. 在dropwizard中使用feign,使用hystrix

    前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...

  2. SpringCloud Feign对Hystrix(断路由)的支持

    第一步:首先开启Feign对Hystrix的支持,在properties文件中添加以下配置: feign.hystrix.enabled=true. 第二步:在上一篇Feign的基础上添加Hystri ...

  3. Feign使用Hystrix

    Feign使用Hystrix开发步骤 1.导入依赖spring-cloud-starter-hystrix 2.消费启动类开启@EnableCircuitBreaker 3.配置yml文件feign. ...

  4. spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback

    spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...

  5. Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合

    创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...

  6. springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

    相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...

  7. springcloud(九)-Feign使用Hystrix

    前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...

  8. 004声明式服务调用Feign & 断路器Hystrix

    1.POM配置 和普通Spring Boot工程相比,添加了Eureka Client.Feign.Hystrix依赖和Spring Cloud依赖管理 <dependencies> &l ...

  9. SpringCloud系列十六:Feign使用Hystrix

    1. 回顾 上文讲解了使用注解@HystrixCommand的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的, 它没有方法体,前文讲解的方式显然不适用与Feign. 事实 ...

随机推荐

  1. 【转】Cowboy 开源 WebSocket 网络库

    原文链接: http://www.cnblogs.com/gaochundong/p/cowboy_websockets.html

  2. Beautiful Soup模块

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...

  3. HAWQ配置之HDFS HA

    一.在ambari管理界面启用HDFS HA 在ambari中这步很简单,在所有安装的服务都正常之后,在HDFS的服务界面中,点击下拉菜单“Actions”,选择启用HDFS HA项 “Enable ...

  4. window/linux composer安装/卸载

    packagist库:https://packagist.org/ window  安装 参考地址:https://www.kancloud.cn/thinkphp/composer/35668 1. ...

  5. CleanAop使用笔记

    前言,本(ˇˍˇ) 想用PostSharp做case,但是破解不成功,所以在github里找了一个CleanAop 地址: https://github.com/Jarvin-Guan/CleanAO ...

  6. 企业SaaS模式的优缺点

    好处: 1.降低成本 项目成本.人员成本 2.使用简单 无需系统维护,用户只需登录就可以享受系统的功能 3.安全性 SaaS模式下,企业用户最关注的是自己的数据能不能得到安全保护. A.涉及的数据有哪 ...

  7. CentOS7 安装Python3,开发SocketIO 客户端

    CentOS7安装Python3,开发SocketIO 客户端 参考:https://blog.csdn.net/lovefengruoqing/article/details/79284573 步骤 ...

  8. LeetCode - 768. Max Chunks To Make Sorted II

    This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...

  9. js版的in_array的实现方法

    这是一个JS版的判断数组内的元素的方法. var arr = ['a','b','c']; console.log(in_array('b',arr)); // true function in_ar ...

  10. Solve Error: "errcode": 85005, "errmsg": "appid not bind weapp hint"

    在使用微信官方给的添加自定义菜单的示例代码: { "button":[ { "type":"click", "name" ...