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整合的更多相关文章

  1. springcloud(九)-Feign使用Hystrix

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

  2. 第八章 SpringCloud之Feign、Hystrix结合使用

    #这个章节主要是针对Hystrix的使用,因为Feign的章节在上一节已经实现了,整个代码也是在上一个章节的基础上修改的 ##################Hystrix一个简单Demo实现#### ...

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

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

  4. springcloud(七) feign + Hystrix 整合 、

    之前几章演示的熔断,降级 都是 RestTemplate + Ribbon 和 RestTemplate + Hystrix  ,但是在实际开发并不是这样,实际开发中都是 Feign 远程接口调用. ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下

    笔记 4.Feign结合Hystrix断路器开发实战<下>     简介:讲解SpringCloud整合断路器的使用,用户服务异常情况     1.feign结合Hystrix       ...

  6. 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上

    笔记 3.Feign结合Hystrix断路器开发实战<上>     简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖          注意:网上新旧版本问 ...

  7. SpringCloud 在Feign上使用Hystrix(断路由)

    SpringCloud  在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...

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

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

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

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

随机推荐

  1. 如何开发一款html5(H5)跨平台 k12动画/交互课件/游戏

    flash交互课件能生动表达教学内容,也深受广大教育工作者的喜爱,但是目前flash课件只能在pc电脑平台上进行展示,且目前苹果公司已经不再支持flash各类产品,也就是后续苹果ios pc系统也已经 ...

  2. linux中脚本在任意目录执行

    完成了一个脚本,find.sh 如果希望可以再linux系统中任何位置都可以执行该脚本,可以执行下面操作 1. chmod 775 find.sh 给该脚本增加可执行权限 2. export PATH ...

  3. web前端基础学习路线

    1.HTML和CSS的基础知识,完成网页的初步设计 2.JavaScript基础知识和DOM.BOM的学习 3.前端基础框架:CSS框架Bootstrap.JavaScript框架jquery的熟悉使 ...

  4. Java中的transient关键字

    转载于:[lfsf802](http://blog.csdn.net/lfsf802/article/details/43239663) 关键字介绍 一个对象只要实现了Serilizable接口,这个 ...

  5. Android中的透明度

    最近在实践中,在一个设置了背景图的LinearLayout中放一个透明度15%,背景色为#ffffff的容器,里面再放白色#ffffff的文本,开始容器用background="#fffff ...

  6. php的运行模式

    1.php最常见的五种运行模式. CGI 通用网关接口 FastCGI 常驻内存的CGI CLI 命令行 Web模块  Apache等Web服务器 模块的形式加载php进程 ISAPI 已经不用了

  7. intellij idea 相关设置

    IDEA这么高端的工具之前只是断断续续使用了一下,因为项目的开发都是在eclipse上,每次学习IDEA的使用都得上网搜索半天,今天自己整理一下,方便以后查阅. IDEA版本15.0.4 字体 界面字 ...

  8. CentOS 6 端口白名单设置

    通在/etc/sysconfig/iptables文档中添加端口白名单,命令如下(编辑好后 esc->wq 保存退出): vi /etc/sysconfig/iptables 添加好后重启防火墙 ...

  9. 转载:深入浅出Zookeeper

    ZAB协议 ZAB协议是专门为zookeeper实现分布式协调功能而设计.zookeeper主要是根据ZAB协议是实现分布式系统数据一致性. zookeeper根据ZAB协议建立了主备模型完成zook ...

  10. linux查看tomcat启动运行日志

    1.先切换到:cd tomcat/logs 2.tail -f catalina.out 3.这样运行时就可以实时查看运行日志了