SpringCloud-day09-Feign与Hystrix整合
8.5.Feign 与 Hystrix整合
服务熔断服务降级彻底解耦
前面的代码,用@HystrixCommand fallbackMethod是很不好的,因为和业务代码耦合度太高,不利于维护,所以需要解耦。
首先我们将Feign与 Hystrix整合。
第一,microservice-ticket-provider-hystrix-1004项目修改
按照正常的逻辑来写;
TicketService加新的接口方法lockTicket():
/**
* 锁票业务
* @return
*/
public Map<String,Object> lockTicket();
TicketServiceImpl写具体实现:
@Override
public Map<String, Object> lockTicket() {
try {
//模拟超时用
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Map<String,Object> map=new HashMap<String,Object>();
map.put("code", 200);
map.put("msg", "锁定的车票数据xxxxx3000");
return map;
}
TicketProviderController正常调用service方法:
注意:注释部分是之前的那种方法写的,为了便于学习对比,注释保留
/**
* 锁票业务
*
* @return
* @throws InterruptedException
*/
@ResponseBody
@GetMapping(value = "/lockTicket")
// @HystrixCommand(fallbackMethod = "lockTicketFallback")
public Map<String, Object> lockTicket() throws InterruptedException {
// Thread.sleep(2000);
// Map<String,Object> map=new HashMap<String,Object>();
// map.put("code", 200);
// map.put("msg", "锁定的车票数据xxxxx3000");
// return map;
return ticketService.lockTicket();
} /**
* 模拟锁票超时 或者 系统故障的回调函数
* @return
* @throws InterruptedException
*/
// public Map<String,Object> lockTicketFallback() throws InterruptedException{
// Map<String,Object> map=new HashMap<String,Object>();
// map.put("code", 500);
// map.put("msg", "系统出错,稍后重试");
// return map;
// }
第二步:microservice-common项目新建FallbackFactory类,解耦服务熔断服务降级
TicketClientService接口,新增lockTicket()方法;
/**
* 索票业务
* @return
*/
@GetMapping(value="/ticket/lockTicket")
public Map<String,Object> lockTicket();
新建 TicketClientFallbackFactory 类,实现FallbackFactory<TicketClientService>接口;
package com.wfd360.service; import com.wfd360.model.Ticket;
import feign.hystrix.FallbackFactory;
import org.springframework.web.bind.annotation.PathVariable; import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by 姿势帝-博客园 on 2019/4/1.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/ public class TicketClientFallbackFactory implements FallbackFactory<TicketClientService> {
@Override
public TicketClientService create(Throwable throwable) {
return new TicketClientService() {
@Override
public Ticket get(@PathVariable("id") Integer id) {
// 服务超时或者出错时 返回的业务逻辑
return null;
} @Override
public List<Ticket> list() {
// 服务超时或者出错时 返回的业务逻辑
return null;
} @Override
public boolean save(Ticket ticket) {
// 服务超时或者出错时 返回的业务逻辑
return false;
} @Override
public boolean delete(@PathVariable("id") Integer id) {
// 服务超时或者出错时 返回的业务逻辑
return false;
} @Override
public Map<String, Object> lockTicket() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", 500);
map.put("msg", "系统出错,稍后重试");
return map;
}
};
}
}
TicketClientService接口的@FeignClient注解加下 fallbackFactory属性
@FeignClient(value="MICROSERVICE-STUDENT",fallbackFactory=TicketClientFallbackFactory.class)
这类我们实现了 降级处理方法实现;
第三步:microservice-ticket-consumer-feign-80修改 支持Hystrix
TicketConsumerFeignController新增方法调用
/**
* 索票
* @return
*/
@GetMapping(value="/lockTicket")
@ResponseBody
public Map<String,Object> lockTicket(){
System.out.println("------调用锁票业务------------");
return ticketClientService.lockTicket();
}
application.yml加上hystrix支持
feign:
hystrix:
enabled: true
=======================
feign与hystrix 服务熔断服务降级彻底解耦完成,测试与之前一样!
8.6.Feign Hystrix整合之超时时间配置
Feign Hystrix整合后,hystrix超时时间配置的话 这里要配置到消费端。
也就是 microservice-ticket-provider-hystrix-1004 的 yml里的
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
这个配置放到 microservice-ticket-consumer-feign-80 的yml里
但是 放进去后 大伙测试 依然无效。
这里因为还有一个 feign 也有一个超时时间的设置,当然feign底层是 ribbon的封装,所以 直接配置ribbon,ribbon默认超时也是1秒。
所以这里都是强制要求,ribbon的超时时间要大于hystrix的超时时间,否则 hystrix自定义的超时时间毫无意义。
所以还得加个 ribbon超时时间设置
ribbon:
ReadTimeout: 50000
ConnectTimeout: 6000
测试与之前一样,大家可以设定设置超时间后,在调整睡眠时间进行测试!
hystrix 的应用暂时讲到这里,本案例代码可以下载 V8版本!
SpringCloud-day09-Feign与Hystrix整合的更多相关文章
- springcloud(九)-Feign使用Hystrix
前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...
- 第八章 SpringCloud之Feign、Hystrix结合使用
#这个章节主要是针对Hystrix的使用,因为Feign的章节在上一节已经实现了,整个代码也是在上一个章节的基础上修改的 ##################Hystrix一个简单Demo实现#### ...
- Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合
创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...
- springcloud(七) feign + Hystrix 整合 、
之前几章演示的熔断,降级 都是 RestTemplate + Ribbon 和 RestTemplate + Hystrix ,但是在实际开发并不是这样,实际开发中都是 Feign 远程接口调用. ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下
笔记 4.Feign结合Hystrix断路器开发实战<下> 简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.feign结合Hystrix ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上
笔记 3.Feign结合Hystrix断路器开发实战<上> 简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖 注意:网上新旧版本问 ...
- SpringCloud 在Feign上使用Hystrix(断路由)
SpringCloud 在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
- SpringCloud系列十六:Feign使用Hystrix
1. 回顾 上文讲解了使用注解@HystrixCommand的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的, 它没有方法体,前文讲解的方式显然不适用与Feign. 事实 ...
随机推荐
- theano安装问题
WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain` ...
- 通过Nginx使全站页面变灰
摘要:某大神的博客说“在Nginx负载均衡服务器上,利用sub_filter指令在输出的HTML中增加一行:<style type="text/css">html {f ...
- 工控随笔_08_西门子_Win10安装Step7.V5.6中文版授权管理器不能正常启动
随着Windows系统的不断升级,西门子工控软件也不断升级,但是有时候在安装西门子 软件的时候会出现授权管理器不能正常启动的情况. 图 Step7 因为自动许可证管理器不能正常打开 如上图所示,报S ...
- 通俗易懂理解Linux文件权限修改chmod命令
chmod g+w filename 给同组用户增加filename文件的写权限 chmod go+rw filename 给同组和组外用户增加写和读的权限 chmod g-w filename 给同 ...
- 公司-半导体:Micron
ylbtech-公司-半导体:Micron 美光科技有限公司(Micron Technology, Inc.)是高级半导体解决方案的全球领先供应商之一.通过全球化的运营,美光公司制造并向市场推出DRA ...
- quartz 使用问题,小坑
1.quartz时区 ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity(triggerName, group).StartNow() ...
- electron+antd详细教程
第一步: 要做一个electron项目,理论上我们应该从electron-quick-start开始,就是说我们需要如下3个文件: package.json,node工程最基本的要求,类似于Java的 ...
- Resharper快捷键汇总
编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...
- 取消win10 任务栏已固定的软件
通过组策略编辑器 设置为“已禁用”,就可 ,自由取消已固定的图标.
- Postman Could not get any response
在使用postman时遇到的小问题,记录一下: 报错信息如下: Could not get any response There was an error connecting to https:// ...