Feign 与 Hystrix
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的更多相关文章
- 在dropwizard中使用feign,使用hystrix
前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...
- SpringCloud Feign对Hystrix(断路由)的支持
第一步:首先开启Feign对Hystrix的支持,在properties文件中添加以下配置: feign.hystrix.enabled=true. 第二步:在上一篇Feign的基础上添加Hystri ...
- Feign使用Hystrix
Feign使用Hystrix开发步骤 1.导入依赖spring-cloud-starter-hystrix 2.消费启动类开启@EnableCircuitBreaker 3.配置yml文件feign. ...
- spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback
spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...
- Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合
创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
- springcloud(九)-Feign使用Hystrix
前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...
- 004声明式服务调用Feign & 断路器Hystrix
1.POM配置 和普通Spring Boot工程相比,添加了Eureka Client.Feign.Hystrix依赖和Spring Cloud依赖管理 <dependencies> &l ...
- SpringCloud系列十六:Feign使用Hystrix
1. 回顾 上文讲解了使用注解@HystrixCommand的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的, 它没有方法体,前文讲解的方式显然不适用与Feign. 事实 ...
随机推荐
- C# 在while循环中new的对象
一: 问:那每次循环都会new一个A?那内存不是会满吗?还是说要把这个初始化对象的动作放到循环外面的写法会比较好? while(true) { A a = new A(); ... sleep(100 ...
- CentOS7安装Java还是无法使用javac
centos7.4 安装java之后,还是无法使用javac命令.报错提示: [root@ip---- centos]# javac bash: javac: command not found 解决 ...
- dedecms wap 上一篇 下一篇 链接出错
打开 \include\arc.archives.class.php 文件 大约在839 行,查找 $mlink = 'view.php?aid='.$preRow['id']; 修改 ...
- python sort和sorted区别。
前者是方法,后者是函数.oop和opp区别的经典体现.好好领会,就能知道什么时候写类什么时候写函数好.
- String 类型的值能够被反射改变从而引发的意外事件
今天刷技术文章,遇到了一个问题,用 Java 反射机制去修改 String 变量的值,出于深入研究,就发现了一个问题,即,用初始值比较修改后的值,用 == or .equals() 方法,出现了相等的 ...
- K XOR Clique
BaoBao has a sequence a1,a2,...,an. He would like to find a subset S of {1,2,...,n} such that ∀i ...
- Solve Docker for Windows error: docker detected, A firewall is blocking file Sharing between Windows and the containers
被这个“分享硬盘”问题烦了我好几个小时,终于在一个叫Marco Mansi外国人博客上找到解决方法了,真的很无奈 https://blog.olandese.nl/2017/05/03/solve-d ...
- HTML01
1.什么是HTML?(Hyper Text Markup Language:超文本标记语言) 超文本:功能比普通文本更加强大 标记语言:使用一组标签对内容进行描述的一门语言(它不是编程语言) 2.为什 ...
- 印刷行业合版BOM全阶维护示例
先看看基本界面: 在上图中,左侧为产品的整个树形图 目前产品有4种状态: 1.普通产品,颜色为黑色 2.需要拼版的产品,颜色为绿色 3.拼版的产品(例如印刷件),基准件为红色 4.拼版的产品,非基准件 ...
- ArcPy中mapping常见函数及用法1
arcpy的mapping模块常见属性方法总结1.如何获取当前地图文档: 方式:mxd = mapping.MapDocument("CURRTENT")引用本地或者网络文档(ar ...