# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3)

news2024/12/23 11:02:16

从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3)

一、hystrix:通过 Actuator 获取 hystrix 的监控数据

1、Hystrix 的监控平台介绍:

1)Hystrix 除了实现容错功能,Hystrix 还提供了近乎实时的监控,
HystrixCommand 和 HystrixObservableCommand 在执行时,会生成执行结果和运行指标。
比如每秒的请求数量,成功数量等。

2)这些状态会暴露在 Actuator 提供的 /health 端点中。
我们只需为项目添加 spring-boot-actuator 依赖,重启项目,

访问 http://localhost:9001/actuator/hystrix.stream, 即可看到实时的监控数据。

2、hystrix:通过 Actuator 获取 hystrix 的监控数据 步骤。

1)在项目 pom.xml 配置文件中,导入 Actuator 相关依赖坐标。

<!-- 1)引入 Hystrix 依赖坐标 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- 引入 hystrix 的监控信息 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2)在项目启动类 激活 Hystrix 组件。

@SpringBootApplication
@EntityScan("djh.it.order.domain")
@EnableEurekaClient  //激活 EurekaClient,同 @EnableDiscoveryClient 注解相同。
@EnableFeignClients  //激活 Feign
@EnableCircuitBreaker  // 2)激活 hystrix
public class OrderApplication {...}

3)在项目 application.yml 配置文件上,配置 Actuator 获取 hystrix 的监控数据信息。

management:   # 配置 Actuator 获取 hystrix 的监控数据 暴露端点。
  endpoints:
    web:
      exposure:
        include: '*'   # 暴露所有端点。

3、在服务消费者 order_service 子工程(子模块)pom.xml 配置文件中,引入 Actuator 相关依赖坐标。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring_cloud_consul_demo</artifactId>
        <groupId>djh.it</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>order_service</artifactId>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--            <version>5.1.32</version>-->
            <version>8.0.26</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- 导入 eureka 注册中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- springcloud 提供的对基于 consul 的服务发现 -->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-consul-discovery</artifactId>-->
<!--        </dependency>-->
<!--        &lt;!&ndash; actuator 健康检查 &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-actuator</artifactId>-->
<!--        </dependency>-->
        <!-- springcloud 整合 openFeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- Hystrix 组件 对 RestTemplate 的支持4步:1)引入 Hystrix 依赖坐标 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!-- 引入 hystrix 的监控信息 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
    </dependencies>
</project>
<!--  spring_cloud_consul_demo\order_service\pom.xml -->

4、在服务消费者 order_service 子工程(子模块)启动类 OrderApplication.java 上激活 hystrix 组件。

/**
 *    spring_cloud_demo\order_service\src\main\java\djh\it\order\OrderApplication.java
 *
 *   2024-4-27  启动类 OrderApplication.java
 */
package djh.it.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EntityScan("djh.it.order.domain")
@EnableEurekaClient  //激活 EurekaClient,同 @EnableDiscoveryClient 注解相同。
@EnableFeignClients  //激活 Feign
@EnableCircuitBreaker  // 2)激活 hystrix
public class OrderApplication {

    //@EnableFeignClients  //激活 Feign 组件后,不需要以下配置。
//    @LoadBalanced
//    @Bean
//    public RestTemplate restTemplate(){
//        return new RestTemplate();
//    }

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}


5、在服务消费者 order_service 子工程(子模块)application.yml 配置文件中,配置 Actuator 获取 hystrix 的监控数据信息。

##  spring_cloud_consul_demo\order_service\src\main\resources\application.yml

server:
  port: 9002  # 启动端口 命令行注入。
#  port: ${port:9002}  # 启动端口设置为动态传参,如果未传参数,默认端口为 9002
#  tomcat:
#    max-threads: 10  # 设置 tomcat 最大连接数量,用以模拟高并发环境问题。

spring:
  application:
    name: service-order  #spring应用名, # 注意 FeignClient 不支持名字带下划线
#  main:
#    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。
  datasource:
    driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    # MySQL8.0 可以写成  root, 012311 或  'root', '012311'   # MySQL5.7 只能写成 'root', '012311'  # 注意用户名和密码后一定不能有空格。
    username: 'root'
    password: '12311'
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true

eureka:  # 配置 Eureka
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/  # 多个 eurekaserver 用 , 隔开。
  instance:
    prefer-ip-address: true  # 使用 ip 地址注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

# 配置 feign 日志的输出。
# 日志配置:NONE:GI 不输出日志,BASIC:适用于生产环境追踪问题,HEADERS:在BASIC基础上,记录请求和响应头信息,FULL:记录所有。
logging:
  level:
    djh.it.order.feign.ProductFeignClient: debug

feign:
  client:
    config:
      default:
        connectTimeout: 5000   #服务之间建立连接所用的时间  #不设置 connectTimeout 会导致 readTimeout 设置不生效
        readTimeout: 5000   #建立连接后从服务端读取到数据用的时间
      service-product:  # 需要调用的服务名称
        loggerLevel: FULL
  hystrix:  # 开启对 hystrix 的支持。
    enabled: true

hystrix:  # 配置 hystrix 熔断(Hystrix:基于 RestTemplate 的统一降级配置)
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000  # 默认的熔断超时时间为1秒,若1秒没有返回数据,会自动触发降级逻辑。

management:   # 配置 Actuator 获取 hystrix 的监控数据 暴躁端点。
  endpoints:
    web:
      exposure:
        include: '*'   # 暴露所有端点。

#  # 配置 consul 的服务注册
#  cloud:
#    consul:
#      host: 127.0.0.1  # consul 服务器的主机地址
#      port: 8500  # consul 端口
#      discovery:
#        register: false  # 是否需要注册,默认是 false
#        instance-id: ${spring.application.name}-1  # 注册的实例 ID(唯一标志)
#        service-name: ${spring.application.name}  # 服务的名称
#        port: ${server.port}  # 服务的请求端口
#        prefer-ip-address: true  # 指定开启 IP 地址注册
#        ip-address: ${spring.cloud.client.ip-address}  # 当前服务的请求 IP

6、重新运行 eureka_service, order_service, product_service 三个模块启动类,进行测试。

1)浏览器地址栏输入:http://localhost:9002/actuator/hystrix.stream 查看访问监控数据。

在这里插入图片描述

2)浏览器地址栏输入:http://localhost:9002/actuator 可以查看当前 actuator 输出的端点信息。

在这里插入图片描述

3)浏览器地址栏输入:http://localhost:9002/order/buy/1
刷新请求,重新查看访问监控数据

在这里插入图片描述

二、hystrix:通过 hystrix 的 dashboard 监控 hystrix 数据流

1、Hvstrix 官方还提供了基于图形化的 DashBoard(仪表板)监控平台。Hystrix 仪表板可以显示每个断路器(被@HystrixCommand注解的方法)的状态。

2、hystrix:通过 hystrix 的 dashboard 监控 hystrix 数据流,搭建 Hystrix DashBoard 监控平台步骤。

1)在项目 pom.xml 配置文件中,导入 Actuator 相关依赖坐标。

<!-- 1)引入 Hystrix 依赖坐标 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- 引入 hystrix 的监控信息 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2)在项目 启动类 使用 @EnableHystrixDashboard 注解,激活仪表盘项目。

@EnableHystrixDashboard  // 激活 Hystrix 基于图形化的 DashBoard(仪表板)监控平台
public class OrderApplication {...}

3)运行启动类,访问测试。

3、在服务消费者 order_service 子工程(子模块)pom.xml 配置文件中,引入 Actuator 相关依赖坐标。

略,前面已经导入。

4、在服务消费者 order_service 子工程(子模块)启动类 OrderApplication.java 使用 @EnableHystrixDashboard 注解,激活仪表盘项目。

/**
 *    spring_cloud_demo\order_service\src\main\java\djh\it\order\OrderApplication.java
 *
 *   2024-4-27  启动类 OrderApplication.java
 */
package djh.it.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EntityScan("djh.it.order.domain")
@EnableEurekaClient  //激活 EurekaClient,同 @EnableDiscoveryClient 注解相同。
@EnableFeignClients  //激活 Feign
@EnableCircuitBreaker  // 2)激活 hystrix,  Hystrix 组件 对 RestTemplate 的支持4步:
@EnableHystrixDashboard  // 激活 Hystrix 基于图形化的 DashBoard(仪表板)监控平台
public class OrderApplication {

//    //@EnableFeignClients  //激活 Feign 组件后,不需要以下配置。
//    @LoadBalanced
//    @Bean
//    public RestTemplate restTemplate(){
//        return new RestTemplate();
//    }

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

5、重新运行 eureka_service, order_service, product_service 三个模块启动类,进行测试。

1)浏览器地址栏输入:http://localhost:9002/hystrix

就进入 基于图形化的 DashBoard(仪表板)监控平台。

在这里插入图片描述
2)在输入框输入请求数据地址:http://localhost:9002/actuator/hystrix.stream 进入。

浏览器地址栏输入:http://localhost:9002/order/buy/1 多刷新几次,就会看到图表变化。
在这里插入图片描述

上一节链接请点击:
# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA基础之多线程】多线程案例以及自定义线程池

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1.多线程 1.1 概述 1.2 并发和并行 1.3 进程和线程 1.4 多线程的实现 1.4.1 继承Thread类 1.4.2 实现Runnable接口 1.4.3 实现Callable接口 1.4.4 总结 …

Flask 3 保姆级教程(一):快速上手

一、创建项目 PyCharm 中新建项目 创建完成后会出现这么个项目 以下是代码解析&#xff1a; # 导入了 Flask 类 from flask import Flask# 创建了一个 Flask web 应用的实例&#xff0c;并将其赋值给变量 app # __name__ 是一个特殊的 Python 变量&#xff0c;它表示当前模块…

Educational Codeforces Round 165 (Rated for Div. 2 ABCDE 题)视频讲解

A. Two Friends Problem Statement Monocarp wants to throw a party. He has n n n friends, and he wants to have at least 2 2 2 of them at his party. The i i i-th friend’s best friend is p i p_i pi​. All p i p_i pi​ are distinct, and for every i ∈…

一文全面了解 wxWidgets 布局器(Sizers)

目录 Sizers背后的理念 共同特征 最小大小 边框 对齐方式 伸缩因子 使用 Sizer 隐藏控件 wxBoxSizer wxStaticBoxSizer wxGridSizer wxFlexGridSizer 布局器&#xff08;Sizers&#xff09;&#xff0c;由wxWidgets类层次结构中的wxSizer类及其派生类表示&#xff0…

社会信用示范城市信用代码和虚拟变量(1990-2022年)

01、数据介绍 数据名称&#xff1a;社会信用示范城市信用代码和虚拟变量 数据年份&#xff1a;1990-2022年 计算说明&#xff1a; 数据来源&#xff1a; 时间跨度&#xff1a;1990-2023 年 区域范围&#xff1a;上市公司所属城市范围 参考文献&#xff1a; [1]曹雨阳,孔东…

树莓派控制步进电机(下):软件编程

目录 说明 软件编程 树莓派的RPI编程 基本测试程序 参考文献 说明 在上一篇博文中我们介绍了树莓派控制步进电机所需要的硬件连接&#xff0c;本篇博文主要介绍软件编程。这里我们使用的是树莓派4B开发板&#xff0c;步进电机为6线两相步进电机&#xff0c;驱动器采用的是…

【强训笔记】day6

NO.1 思路&#xff1a;因为存的字符串高位存放的是低下标&#xff0c;所以输出的字符串必须先翻转。 代码实现&#xff1a; class Solution { public:string solve(string s, string t) {string ret;int is.size()-1,jt.size()-1;int tmp0;while(i>0||j>0||tmp){if(i&…

【C++】学习笔记——模板

文章目录 三、内存管理4. operator new与operator delete函数5. new 和 delete 的实现原理1. 内置类型2. 自定义类型3. malloc/free和new/delete的区别 四、模板初阶1. 泛型编程模板实例化 未完待续 三、内存管理 4. operator new与operator delete函数 我们之前学到&#xf…

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升&#xff0c;铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点&#xff0c;广泛应用于建筑、汽车、电子等领域。然而&#xff0c;铝型材的形状多样、尺寸不一&#xff0c;以及生产线上的高…

Spring Cloud——LoadBalancer

Spring Cloud——LoadBalancer 一、负载均衡&#xff08;LoadBalance&#xff09;1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 二、LoadBalancer1.Spring RestTemplate as a LoadBalancer Client2.编码使用DiscoveryClient动态获取所有上线的服务列表3.从默认…

详细分析Java中的脱敏注解(附Demo)

目录 前言1. 基本知识2. 核心逻辑3. Demo4. 模版 前言 对于隐私信息&#xff0c;需要做特殊处理&#xff0c;比如身份证或者手机号等 对于Java的相关知识推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09; 1. 基本知…

【4/26-4/30】 Arxiv安全类文章速览

4/26 标题: Merchants of Vulnerabilities: How Bug Bounty Programs Benefit Software Vendors 作者: Esther Gal-Or, Muhammad Zia Hydari, Rahul Telang摘要: 软件漏洞允许恶意黑客利用&#xff0c;威胁系统和数据安全。本文研究了激励道德黑客发现并负责任地向软件供应商披…

[PS小技能学习]抠图和切图

详情见视频教程&#xff1a;PS小技巧--抠图与切图 今天我们来学习如何使用PS对表情包合辑进行抠图和裁剪保存 1、首先&#xff0c;将图片导入&#xff0c;双击图层新建一个图层 2、然后点击工具栏的魔棒工具&#xff0c;再点击顶部菜单栏的添加到选区 3、点击图片的空白区域即…

spring boot学习第十八篇:使用clickhouse

1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

目标检测算法YOLOv3简介

YOLOv3由Joseph Redmon等人于2018年提出&#xff0c;论文名为&#xff1a;《YOLOv3: An Incremental Improvement》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1804.02767.pdf &#xff0c;项目网页&#xff1a;https://pjreddie.com/darknet/yolo/ 。YOLOv3是对YOL…

我独自升级崛起怎么注册?新手一看就会的注册方法

《我独自升级&#xff1a;ARISE》是网石旗下一款以网漫《我独自升级》IP开发的ARPG&#xff0c;游戏中&#xff0c;玩家会成为漫画主角程肖宇进行战斗&#xff0c;并通过升级使用更多技能和武器&#xff0c;打造出属于自己的战斗风格。同时&#xff0c;游戏中还将体现原作的核心…

2.1 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-初识Vue

Vue概述 早期前后端分离模式 早期的前后端分离开发模式是这样的&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

blender(布兰德)下载安装-windows系统安装

1.简单介绍 这些介绍都是一些百科或官网提供的内容&#xff0c;直接搜索对应的信息后即可看到。Blender&#xff08;布兰德&#xff09;是一款永久开源免费的3D创建套件。支持整个3D创作流程&#xff1a;建模、雕刻、骨骼装配、动画、模拟、实时渲染、合成和运动跟踪&#xff…

基于Spring Boot的校园闲置物品交易网站设计与实现

基于Spring Boot的校园闲置物品交易网站设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看…

Java线上CPU内存冲高问题排查步骤

01 引言 作为一名从事Java开发快一年的程序员&#xff0c;在线上经常碰到某个模块的Pod发出CPU与内存告警的问题&#xff0c;而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过重启或者调高Pod的资源量或者增加Pod数量暂时解决问题&#xff0c;但这是治标不治…