ps:Hystrix和Fegin里面使用的Hystrix,有些许区别.我理解的是Fegin.Hystrix主要是用于消费方在调用服务方接口时的异常处理,返回兜底数据等,而Hystrix则是消费方自己本身发生了异常时的处理

c

熔断:
        保险丝,熔断服务,为了防止整个系统故障,包含子和下游服务

        下单服务 -》商品服务
                -》用户服务 (出现异常-》熔断)

    降级:
        抛弃一些非核心的接口和数据

        旅行箱的例子:只带核心的物品,抛弃非核心的,等有条件的时候再去携带这些物品

        
    熔断和降级互相交集
        相同点:
            1)从可用性和可靠性触发,为了防止系统崩溃
            2)最终让用户体验到的是某些功能暂时不能用

        不同点
            1)服务熔断一般是下游服务故障导致的,而服务降级一般是从整体系统负荷考虑,由调用方控制

1.引入依赖

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

2.启动类增加注解@EnableCircuitBreaker

3.在需要使用熔断器的方法上增加注解@HystrixCommand(fallbackMethod = "saveOrderFail")

  

 @RequestMapping("save")
@HystrixCommand(fallbackMethod = "saveOrderFail")
public Object save(@RequestParam("user_id")int userId,@RequestParam("product_id")int productId){ };

4.编写saveOrderFail方法

//方法签名要和api一致
public Object saveOrderFail(int userId,int productId){
//写下你期望用户请求失败之后返回的操作 TODO
}

5.老师的思路,实在这里引入redis,一定时间就发送短信,邮件,或者打电话通知开发人员并且带上IP地址,需要定位问题,

 //方法签名要和api一致
public Object saveOrderFail(int userId,int productId){
Map<String, Object> msg = new HashMap<>(); //监控报警
String saveOrderKey = "save-order"; String sendValue = stringRedisTemplate.opsForValue().get(saveOrderKey);
/**
* 熔断告警机制:在redis中存储具有时效性的key,然后通过这个key是否存在来进行短信告警
* 1.并发高的时候这样可能会多发短信,要采用锁
* 2.也可以在每个服务本地安装一个redis,在发送短信的时附上每个服务的IP,更加便于排查错误
*/
new Thread(()->{
if(StringUtils.isBlank(sendValue)){
System.out.println("紧急短信,用户下单失败,请立刻查找原因");
//TODO 调用HTTP请求,调用短信服务 stringRedisTemplate.opsForValue().set(saveOrderKey,"save-order-fail",20, TimeUnit.SECONDS);
}else{
System.out.println("已经发送过短信,20秒内不要重复发送");
} }).start(); msg.put("code",-1);
msg.put("msg","抢购人数过多,请稍后再试");
return msg;
}

累了,敲一天了,不写了

使用idea从零编写SpringCloud项目-Hystrix的更多相关文章

  1. 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目

    前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...

  2. 从零搭建一个SpringCloud项目之Feign搭建

    从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...

  3. CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL

    CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL +BIT祝威+悄悄在此留下版了个权的信息说: 开始 本文用step by step的方式,讲述如何使 ...

  4. docker初体验:Docker部署SpringCloud项目eureka-server

    Docker部署SpringCloud项目eureka-server 1 创建eureka-server工程 创建父工程cloud-demo,其pom.xml如下: <?xml version= ...

  5. 微服务SpringCloud项目架构搭建入门

    Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud ...

  6. Nacos笔记01——使用Nacos作为SpringCloud项目的服务注册中心

    前言 刚学SpringCloud时使用eureka作为服务注册中心,随着网飞公司eureka2.x不再更新,以及最近在公司实习接触到的SpringCloud项目是使用Nacos来做服务注册中心的,所以 ...

  7. 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并

    背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...

  8. 搭建简单的SpringCloud项目三:问题及解决

    GitHub:https://github.com/ownzyuan/test-cloud 前篇:搭建简单的SpringCloud项目一:注册中心和公共层 搭建简单的SpringCloud项目二:服务 ...

  9. 搭建简单的SpringCloud项目二:服务层和消费层

    GitHub:https://github.com/ownzyuan/test-cloud 前篇:搭建简单的SpringCloud项目一:注册中心和公共层 后篇:搭建简单的SpringCloud项目三 ...

  10. 在Android上编写模块化项目(翻译)

    来源博客:Wang Jie's Blog 本文链接:http://blog.wangjiegulu.com/2018/02/13/writing_a_modular_project_on_androi ...

随机推荐

  1. js中的this的指向问题

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调 ...

  2. 画ERA5气压层剖面图(含地形)

    气象上一般使用气压垂直坐标系,在不同的气压层绘制变量.ERA5再分析数据的最低气压层是1000 hPa.实际上,由于地形起伏,一些位置的地面气压低于1000 hPa,一些位置的地面气压高于1000 h ...

  3. 动态规划-1-钢条切割(Dynamic Programming-1-rod cutting)

    1 #include <stdio.h> 2 #define LEN 10 3 #define NEGINF -999999 4 struct r_d { 5 int r; //profi ...

  4. k8s_使用k8s部署wordpress博客系统(一)

    系统部署流程 使⽤kubernetes部署wordpress+MySQL, 并利⽤NFS去保存我们容器的源代码以及DB数据.搭建好nfs后任意node上的Pod访问db或者业务代码都会有相同的效果,数 ...

  5. 真实世界的算法_pdf

    链接:https://pan.baidu.com/s/1OZiDnd2My3FvGIuwO91E7Q 提取码:t88i

  6. taro+vue3模板-废弃

    一.初始化 1.Taro 基本安装并初始化项目 npx @tarojs/cli init WechatAppDemo 2.cd到新项目的文件夹 3.安装依赖:yarn 4.运行预览: yarn dev ...

  7. iview table添加input框,且校验

    方法一 render渲染 { title: "用户名", key: "stockPrice", render: (h, params) => { retu ...

  8. SQL预编译

    1.数据库预编译起源 (1)数据库SQL语句编译特性: 数据库接受到sql语句之后,需要词法和语义解析,优化sql语句,制定执行计划.这需要花费一些时间.但是很多情况,我们的一条sql语句可能会反复执 ...

  9. java问题解答

    因为子类继承自父类,会沿用父类的东西(没被覆盖的函数以及可见的成员变量等),而这些东西子类是没有的,需要先初始化父类才能被使用 子类构造方法中调用父类构造方法,一个作用是可以给父类构造方法传递实参,给 ...

  10. OSP6部署流程

    准备4台虚拟机,完成初始化 一.架构如下: Controller  控制节点 也可以复用为计算节点   192.168.6.11 Compute01   192.168.6.21 Compute02  ...