博客

超级管理员

91

帖子

19

回复

265

积分

楼主
发表于 2020-03-13 11:07:58 | 查看: 246 | 回复: 0

SpringClond 微服架构学习目录

第一节:SpringCloud 简介

第二节:父项目 microservice 建立

第三节:公共模块项目 microservice-common 搭建

第四节:服务提供者项目 microservice-student-provider-1001 建立

第五节:服务消费者项目 microservice-student-consumer-80 建立

第六节:服务治理组件 Eureka 简介

第七节:搭建 Eureka 服务注册中心

第八节:注册服务提供者到 Eureka 注册中心

第九节:Eureka 注册中心高可用集群配置

第十节:Eureka 自我保护机制

第十一节:Ribbon 简介

第十二节:Ribbon 初步应用

第十三节:Ribbon 负载均衡

第十四节:Feign 简介

第十五节:Feign 应用

第十六节:Hystrix 断路器简介

第十七节:服务雪崩效应

第十八节:Hystrix 服务熔断服务降级

第十九节:Hystrix 默认超时时间设置

第二十节:Hystrix 服务监控 Dashboard

第二十一节:Hystrix 集群监控 turbine

第二十二节:Feign Hystrix 整合&服务熔断服务降级彻底解耦

第二十三节:Feign Hystrix 整合之超时时间配置



第十八节  Hystrix 服务熔断服务降级


Hystrix服务熔断服务降级@HystrixCommand fallbackMethod


熔断机制是应对雪崩效应的一种微服务链路保护机制。

当某个服务不可用或者响应时间超时,会进行服务降级,进而熔断该节点的服务调用,快速返回自定义的错误影响页面信息。


我们写个项目来测试下;


我们写一个新的带服务熔断的服务提供者项目 microservice-student-provider-hystrix-1004

把 配置和 代码 都复制一份到这个项目里;


然后修改;


1,pom.xml加下 hystrix支持

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>


2,application.yml修改下端口和实例名称

port: 1004
 instance-id: microservice-student-hystrix:1004 #客户端实例名称


3,启动类名称改成StudentProviderHystrixApplication_1004

以及加下注解支持 @EnableCircuitBreaker


4,我们新增方法getInfo

 /**
 * 获取信息
 * @return
 * @throws InterruptedException 
 */
@ResponseBody
@GetMapping(value="/getInfo")
@HystrixCommand(fallbackMethod="getInfoFallback")
public Map<String,Object> getInfo() throws InterruptedException{
    Thread.sleep(2000);
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("code", 200);
    map.put("info", "业务数据xxxxx");
    return map;
}
 
public Map<String,Object> getInfoFallback() throws InterruptedException{
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("code", 500);
    map.put("info", "系统出错,稍后重试");
    return map;
}

这里我正常访问 返回的是 200  业务数据xxxxx 

但是我们这里Thread.sleep(2000) 模拟超时;

这里的话 我们加上@HystrixCommand注解 以及 fallbackMethod

表明这个方法我们再 没有异常以及没有超时(hystrix默认1秒算超时)的情况,才返回正常的业务数据;

否则,进入我们fallback指定的本地方法,我们搞的是500  系统出错,稍后重试,有效的解决雪崩效应,以及返回给用户界面

很好的报错提示信息;



============================


microservice-student-consumer-80项目也要对应的加个方法



/**
 * 根据id删除学生信息
 * @return
 */
@SuppressWarnings("unchecked")
@GetMapping(value="/getInfo")
@ResponseBody
public Map<String,Object> getInfo(){
    return restTemplate.getForObject(PRE_HOST+"/student/getInfo/", Map.class);
}


然后我们来测试下;

先启动三个eureka,再启动带hystrix的provider,最后启动普通的consumer;


浏览器:http://localhost/student/getInfo

返回:

QQ鎴浘20181007174956.jpg


因为 Hystrix默认1算超时,所有 sleep了2秒 所以进入自定义fallback方法,防止服务雪崩;


我们这里改sleep修改成100毫秒;


QQ鎴浘20181007175230.jpg


视频讲解


源码下载

[www.iambigboss.top]22 SpringCloud视频教程_Feign Hystrix整合&服务熔断服务降级彻底解耦源码及文档.zip



本帖子中包含资源

您需要 登录 才可以下载,没有帐号?立即注册

您需要登录后才可以回帖 登录 | 立即注册

2018-2020 ©v2.1 冀ICP备19027484号-1

点击这里给我发消息