Springcloud-hystrix组件可以用来进行服务的熔断和降级,

当一个服务出现问题的时候,也可以在降级的方法里面通过发送短信和邮件的形式来进行告警

下面来讲解,如何在hystrix的降级方法里面,进行发短信通知,进行告警的操作

1、首先要引入springboot和redis集成的相关依赖包

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

2、之后,需要在application.yml配置文件中添加redis服务的主机信息和密码,还有端口号

eureka:client:serviceUrl:defaultZone: http://localhost:8181/eureka
spring:application:name: eureka-client-orders-feignredis:host: 127.0.0.1port: 6379timeout: 2000password:server:port: 8188
ribbon:eureka:enabled: truefeign:# 开启feign对hystrix熔断降级的支持hystrix:enabled: true# 修改调用超时时间client:config:default:connectTimeout: 500readTimeout: 500

3、最后在降级的方法里面将异常标志存入到redis中,然后进行告警

package pafc.cloud.feignclient.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import pafc.cloud.feignclient.service.OrderService;import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Controller
@RequestMapping("/orderIdQuery")
public class IndexController {@Autowiredpublic OrderService orderService;@Autowiredprivate StringRedisTemplate redisTemplate;@ResponseBody@HystrixCommand(fallbackMethod = "saveOrderFail")@RequestMapping(value = "/createOrder", method = RequestMethod.GET)public Object allGoods() throws InterruptedException {
//        TimeUnit.SECONDS.sleep(10);Map<String, Object> data = new HashMap<>();data.put("code", 0);data.put("data", orderService.getOrderById("0"));return data;}/*** 进行熔断降级** @return*/private Object saveOrderFail() {String saveKey = "save-order";String saveValue = redisTemplate.opsForValue().get(saveKey);new Thread(() -> {if (StringUtil.isNullOrEmpty(saveValue)) {System.out.println("下单失败,需要紧急查看");//发送一个http请求,发送短信redisTemplate.opsForValue().set(saveKey, "save-order-fail", 20, TimeUnit.SECONDS);} else {System.out.println("已经发送过短信,20秒内请不要重复发送");}}).start();Map<String, Object> msg = new HashMap<>();msg.put("code", -1);msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");return msg;}}

4、启动服务进行测试,把所有的商品服务都给关掉,模拟商品服务超时或者宕机

测试结果如下所示

2020-04-05 11:13:51.731  INFO 11008 --- [-CLIENT-GOODS-1] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client EUREKA-CLIENT-GOODS initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=EUREKA-CLIENT-GOODS,current list of Servers=[localhost:8184, localhost:8183],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;   Instance count:2;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:localhost:8183;    Zone:defaultZone;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
, [Server:localhost:8184;   Zone:defaultZone;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@a673dbc
订单服务,调用商品服务异常
2020-04-05 11:13:52.532  INFO 11008 --- [ HystrixTimer-1] io.lettuce.core.EpollProvider            : Starting without optional epoll library
2020-04-05 11:13:52.537  INFO 11008 --- [ HystrixTimer-1] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
2020-04-05 11:13:52.676  INFO 11008 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty  : Flipping property: EUREKA-CLIENT-GOODS.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
下单失败,需要紧急查看
订单服务,调用商品服务异常
下单失败,需要紧急查看
订单服务,调用商品服务异常
已经发送过短信,20秒内请不要重复发送
2020-04-05 11:17:40.120  INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2020-04-05 11:22:40.121  INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2020-04-05 11:27:40.126  INFO 11008 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration

可以看到系统已经检测到商品服务出现了超时或者宕机

并且已经将告警信息写入到了Redis中。通知维护人员进行检查。

133、springcloud-hystrix 服务监控的告警机制相关推荐

  1. Hystrix服务监控

    Hystrix服务监控 SpringCloud全家桶 学习目标 加入小编的Java学习交流君羊(785794074)暗号:67 Actuator 除了实现服务容错之外,Hystrix 还提供了近乎实时 ...

  2. SpringCloud 微服务监控方案sentinel + spring boot admin

    SpringCloud 微服务监控方案sentinel + spring boot admin 前言:项目基于springcloud框架,服务注册中心使用的是Eureka spring boot ad ...

  3. zabbix4.0添加mysql报警_部署监控三剑客 Zabbix4.0 监控以及告警机制

    Zabbix 简介 : Zabbix 是一个高度集成的企业级开源网络监控解决方案,与Cacti.Nagios类似,提供分布式监控以及集中的 Web 管理界面.被监控对象只要支持 SNMP 协议或者运行 ...

  4. 微服务架构 — 服务治理 — 服务监控与告警、服务日志与审计

    目录 文章目录 目录 日志与审计 监控与告警 配置中心 文档中心 日志与审计 日志分析组件应该在微服务兴起之前就被广泛使用了.即使单体应用架构,当访问数变大.或服务器规模增多时,日志文件的大小会膨胀到 ...

  5. prometheus 配置服务器监控、服务监控、容器中服务监控与告警

    最近公司有几个服务遇到了瓶颈,也就是数据量增加了,没有人发现,这不是缺少一个监控服务和告警的系统吗? 主要需求是监控每个服务,顺带监控一下服务器和一些中间件,这里采集的2种,zabbix和promet ...

  6. springcloud(Hystrix服务降级,服务熔断)

    基础知识 首次分布式服务系统面临的问题 复杂的分布式体系结构中的应用程序有数十个依赖关系,每个依赖有时候难免发生问题,这个时候可能引发连锁反应,导致整个系统雪崩. 所以就有了Hystrix: 官网地址 ...

  7. SpringCloud Hystrix服务熔断和降级的理解

    (个人理解,不喜勿喷)假如我要开发一个项目,但是开发的过程中遇到一个问题,我不会操作数据库(包括数据库连接,数据查询等),我只能向我的朋友请教,朋友A会使用Hibernate,朋友B会JDBC访问数据 ...

  8. springcloud的处理雪崩效应的Hystrix和服务监控Dashboard

    服务雪崩效应 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败. 正常情况下的访问 : 但是,当请求的服务中出现无法访问.异常.超时等问题时(图中的I),那么用户 ...

  9. springCloud - 第13篇 - 服务监控 集群模式 Hystrix-turbine

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 在springcloud 体系中,可以用 hystrix-dashboard  实时监控服务的 ...

最新文章

  1. 所有各数据库或文件的连接串定义CHM文件.
  2. 从配置文件到分布式配置管理QConf
  3. HTML5 开发APP
  4. php 递归实现无限极分类和排序_PHP无限级分类实现层级值间用字符串拼接
  5. a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器
  6. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
  7. 配置环境_python虚拟环境的搭建
  8. 2018年度人工智能优化商业运作的10大途径
  9. php隔行符,PHP PHP_EOL 换行符
  10. 初中数学抽象教学的案例_初中数学教学反思案例
  11. 干货:18 张思维导图,后端技术学习路线长这样!
  12. 10个免费域名转发地址 无广告 无需要注册
  13. workbench拓扑优化教程_ANSYS经典案例在Workbench中实现 | 基于网格重划分的金属成型仿真分析...
  14. [译]应用内搜索功能实现 Android TV应用程序手册教程十三
  15. AccessHelper
  16. 手机自带的一些很实用的小程序,您都用过了吗?
  17. 转载:H.264 H.265 硬件解码芯片?
  18. 仓储物流系统初级架构
  19. 鸿蒙升级后桌面背景底纹怎么弄,ps添加背景怎么弄
  20. 多种调度算法的平均周转时间算例

热门文章

  1. 2022-2028年中国蒸压加气混凝土砖块行业发展模式分析及未来前景规划报告
  2. 我的2011--快乐最重要
  3. 平行四边形shell脚本
  4. 推荐几个有用的电子书供下载
  5. 苹果手机死机怎么办?
  6. Incsgo官方网站-能够取回的csgo开箱子网站
  7. Win10 快速启动对驱动的影响
  8. MAC隐藏文件或文件夹命令
  9. dedeCMS采集内容无需写规则方法
  10. 不同国家外贸开发信特点附模板