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. Cheat Engine(简称CE)初体验

    经常玩一些单机游戏,如CS.植物大战僵尸,,这几天刚好网上看到有人用CE修改内存,直接修改内存数据. 之前没有玩过此类东西,激动不已,于是自己也动手写了几行代码, 实现了CS子弹无限制,血量无限,阳光 ...

  2. C#中CefSharp的简单使用

    1. 创建32位winform项目 必须指定32位或64位 这里使用32位 2. 下载CefSharp相关文件 3. 复制CefSharp相关文件到项目debug目录并添加引用 https://blo ...

  3. 【转】使用Eclipse,将鼠标放在相应方法或字段等元素上时,无法显示提示

    使用Eclipse编写java代码时,将鼠标放在相应方法或字段等元素上时,会有对应的说明或提示. 不过,常出现下面的问题: Note:An exception occurred while getti ...

  4. 洛谷P1040 加分二叉树(树形dp)

    加分二叉树 时间限制: 1 Sec  内存限制: 125 MB提交: 11  解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ...

  5. linux: 用户组, 文件权限详解

    一.用户组 linux中每个用户必须属于一个组,不能独立于组外. 每个文件有所有者.所在组.其他组的概念 --所有者 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者 用ls ‐ahl命 ...

  6. json相关安全问题

    前言: 最近经常遇到json的事情,由于不懂所以系统的学习一下,记录此贴. 00x1: JSON是啥?Java Objiect Notaton 谷歌翻译过来就是JS对象标记,是一种轻量级的数据交换格式 ...

  7. 涨姿势:Mysql 性能优化完全手册

    涨姿势:Mysql 性能优化完全手册 深入理解MySQL服务器架构 客户端层 MySQL逻辑架构整体分为三层,最上层为客户端层,诸如:连接处理.授权认证.安全等功能均在这一层处理. 中间层 MySQL ...

  8. java 读取外部和source下配置文件

    import java.io.File; import java.io.FileInputStream; import java.net.URL; import java.util.Map; impo ...

  9. nmcli配置ipv6

    nmcli配置ipv6 作者:Eric 微信:loveoracle11g [root@racooler ~]# nmcli connection show eno16777736 | grep ipv ...

  10. C++常用数据结构-CString

    CString类Str.format(_T(“%d”),number)例子: str.Format(_T("%d"),number);%c 单个字符(char)%d 十进制整数(i ...