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. 事实 ...
随机推荐
- 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置
Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...
- MD5 Hashing in Java
参考: MD5 Hashing in Java
- xampp启动MySQL出现Error: MySQL shutdown unexpectedly.
20175227张雪莹 2018-2019-2 <Java程序设计> xampp启动MySQL出现Error: MySQL shutdown unexpectedly. 问题 本周在学习教 ...
- 7.6 chcount.c -- 使用逻辑与运算符
include <stdio.h> #define PERIOD '.' int main(void) { char ch; int charcount = 0; while ((ch = ...
- 事务回滚 SET XACT_ABORT ON
USE tempdb IF OBJECT_ID ('dbo.test') IS NOT NULL DROP TABLE dbo.test GO CREATE TABLE dbo.test ( id I ...
- 关于RandomAccessFile一个坑!!!!
最近正好遇到了使用RandomAccessFile做断点下载的情况,被一个问题坑了好多次 本来的代码: RandomAccessFile randomAccessFile = new RandomAc ...
- day72Django之ORM
Django框架之ORM(day72)一 ORM即Object Relational Mapping,全称对象关系映射. 1 不用写sql,不会sql的人也可以写程序 2 开发效率高 3 可能sql的 ...
- rest_framework目录
一 REST API规范 二 rest framework框架的基本使用
- windows计划任务启动bat执行java文件
系统:win7 环境:需要配置好jdk的环境变量 需求:每次开机,用bat批处理执行将一个位于D:\workspace\console目录底下的console.txt重命名的java文件 拿到需求,我 ...
- HTTPS 基本流程3
前文说到了6 组key material, 12个hash 值,非常迷惑, 今天才搞明白, 原来所有这些内容就是 对称密钥的内容. 上面的图 虽然不是很清晰,但是, 其实也已经写明白了, 就是 右边的 ...