项目地址:

github地址

服务熔断和服务降级异同

相同点:让用户体验到的是某些功能暂时不可用;都是从可用性和可靠性出发,为了防止系统崩溃;
不同点:
服务熔断:一般是某个服务(下游服务)故障引起,
服务降级:一般是从整体负荷考虑;

服务熔断的实现方式

1.在服务端添加hystrix坐标

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

2.在对应需要熔断的接口的地方添加注解并编写熔断错误提示的代码

具体的注解是:@HystrixCommand(fallbackMethod = "processHystrix_Get"),其中的fallbackMethod是一旦服务抛出异常之后,会对该参数指定的方法进行调用返回
示例代码:

package com.debuggg.cloud.controller;import com.debuggg.cloud.entities.Dept;
import com.debuggg.cloud.service.DeptService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@Autowiredprivate DiscoveryClient discoveryClient;@RequestMapping(value = "/dept/list",method = RequestMethod.GET)public List<Dept> list(){return deptService.list();}@RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)@HystrixCommand(fallbackMethod = "processHystrix_Get")public Dept get(@PathVariable("id") Long id){Dept dept = deptService.get(id);if(dept == null){throw new RuntimeException("不能为空!");}else{return dept;}}@RequestMapping(value = "/dept/add",method = RequestMethod.POST)public Boolean add(@RequestBody Dept dept){return deptService.add(dept);}@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)public Object discovery(){List<String> list = discoveryClient.getServices();System.out.println("**********" + list);List<ServiceInstance> srvList = discoveryClient.getInstances("DEBUGGGCLOUD-DEPT");for (ServiceInstance element : srvList) {System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"+ element.getUri());}return this.discoveryClient;}public Dept processHystrix_Get(@PathVariable("id") Long id){return new Dept().setDeptno(id).setDname("该ID:"+id+"没有没有对应的信息,null--@HystrixCommand").setDb_source("no this database in MySQL");}
}

服务降级的实现方式

服务降级:服务降级处理时在客户端实现完成的,与服务端没有关系

1.修改microservicecloud-api工程,根据已经有的DeptClientService接口新建一个实现了FallbackFactory接口的类DeptClientServiceFallbackFactory,千万不要忘记在类上面新增@Component注解,大坑!!!

示例代码:

package com.debuggg.cloud.service;import com.debuggg.cloud.entities.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class DeptClientServiceFallback implements FallbackFactory<DeptClientService> {@Overridepublic DeptClientService create(Throwable throwable) {return new DeptClientService() {@Overridepublic Dept get(long id) {return new Dept().setDeptno(id).setDname("该ID:"+id+"没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭").setDb_source("no this database in MySQL");}@Overridepublic List<Dept> list() {return null;}@Overridepublic boolean add(Dept dept) {return false;}};}
}

2.修改microservicecloud-api工程,DeptClientService接口在注解@FeignClient中添加fallbackFactory属性值

@FeignClient(value = "DEBUGGGCLOUD-DEPT",fallbackFactory = DeptClientServiceFallback.class)

3.修改yml

server:port: 10001
eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/register-with-eureka: false
**
feign:hystrix:enabled: true #启用服务降级**

9.Springcloud的Hystrix服务熔断和服务降级相关推荐

  1. 从Netflix的Hystrix框架理解服务熔断和服务降级

    本文讲的是从Netflix的Hystrix框架理解服务熔断和服务降级,伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前,其实大多数概念以前就有,但很少被提的这么频繁.想起有人总结的一句话, ...

  2. 谈谈我对服务熔断、服务降级的理解 专题

    伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了). 想起有人总结的一句话,微服务架构的特点 ...

  3. 谈谈我对服务熔断、服务降级的理解

    伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了).想起有人总结的一句话,微服务架构的特点就 ...

  4. java服务熔断_springcloud-Hystrix-服务降级、服务熔断、服务限流

    Hystrix主要能解决三个问题:服务降级.服务熔断.服务限流:一般用在调用端,比如表现层去调用服务层,常见会用在表现层,但是服务层也行. 1.服务降级 服务降级是:因为某些原因,服务调用出现故障,本 ...

  5. 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别

    高并发之服务降级和服务熔断 服务降级: 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行. 同时保证部分甚至大部分任务客户能得到正确的 ...

  6. 【服务治理】服务熔断、服务降级、服务限流、流量削峰、错峰

    文章目录 服务熔断.服务降级和服务限流 服务熔断 服务降级 服务限流 实现 步骤三.Polly在.NetCore项目中封装 流量错峰.流量限流.流量削峰 流量错峰 服务端错峰策略 客户端错峰策略 流量 ...

  7. 07蚂蚁-高并发解决方案——1.Hystrix服务降级,服务隔离,服务熔断,服务限流,CDN

    高并发服务降级特技 背景 在今天,基于SOA的架构已经大行其道.伴随着架构的SOA化,相关联的服务熔断.降级.限流等思想,也在各种技术讲座中频繁出现.本文将结合Netflix开源的Hystrix框架, ...

  8. springcloud服务熔断和服务降级的自我理解

    服务熔断就是通过一些算法一些方法,当服务出现高并发时用一些方法例如枚举轮询等去换服务实现执行, 服务降级就是当后端服务出现异常服务的提供者关闭后,不能让用户看到的是一个空的页面,于是就显示一个友情提示 ...

  9. SpringCloud进阶-Hystrix的熔断机制+Hystrix的工作流程

    提示:本文主要对SpringCloud中的Hystrix的熔断机制和工作流程进行总结 文章目录 前言 一.简介 1.熔断是什么 二.实操 1.实现 2.测试 三.总结 1.大神结论 2.熔断类型 3. ...

最新文章

  1. CoordinatorLayout 使用及源码解析
  2. python下载图片-Python下载URL图片
  3. JZOJ 5925. 【NOIP2018模拟10.25】naive 的瓶子
  4. spring boot整合WebSocket示例
  5. 将上传图片打上防伪图片水印并写入数据库
  6. 批量scp脚本——从多台机器拷贝文件
  7. 使用 Excel 读取 SAP ABAP CDS View 通过 ODBC 暴露出来的数据
  8. C# 中居然也有切片语法糖,太厉害了
  9. mysql5.1升级5.5_mysql数据库迁移,由版本5.1升级至5.5.29,需要注意哪些
  10. 一元运算符重载 前置和后置++ --(这种一般用成员函数来实现重载)
  11. MVC系列学习(十一)-客户端的验证
  12. sum-ftp-w.sh
  13. 智能电视也需“杀毒”
  14. c语言程序设计自学网进阶,谭浩强老师C语言教程程序设计
  15. 教师节快乐:带大家回顾这十位大师笔下的教师!
  16. CCPC(NQ)2016 - 1004 - Danganronpa 弹丸论破
  17. 小程序云开发支持公众号网页开发了
  18. SQL ifnull、nullif 等函数
  19. 苹果MacPro基本操作指南(持续更新)(2022.6.20版)
  20. [Cue]emulator unknown skin name 'WVGA800'

热门文章

  1. Linux 安装Eclipse
  2. 天津医科大学计算机科学与技术,天津医科大学生物医学工程学院
  3. xstatic图形连接linux,RHCE认证考试模拟题深入讲解:linux配置静态IP地址为:192.168.0.X!...
  4. mysql数据库密码为空_注意MySQL 数据库用户root密码为空_MySQL
  5. 对象存储 OSS > SDK 示例 > C++ > 数据加密 > 服务器端加密
  6. Maven学习总结(31)——Maven坐标详解
  7. 线程打印_经典面试题——两个线程交替打印奇数和偶数
  8. 扫地机器人作文说明文提纲_考后想要估分的同学,考研英语作文评分标准
  9. mysql 列很多_MySQL:多个表还是一个表有很多列?
  10. Python Day42