SpringCloud之Hystrix断路器

一:SpringCloud之Hystrix断路器

  1.  分布式系统面临的问题
     复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败。
         
  2. 什么是Hystrix?
        
  3. 什么是服务熔断?
      
     

二:将Hystrix熔断器整合到项目中去(参考之前的8001提供者部门

       微服务,这个新的提供者微服务加了熔断器)

  1.  创建子模块microservicecloud-provider-dept-hystrix-8001微服务
         
  2. 在pom.xml中添加依赖(这个文件与之前的8001基本没有区别,只有新增了spring-cloud-starter-hystrix依赖)
      
    <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">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>com.topcheer</groupId>
        <artifactId>microservicecloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>microservicecloud-provider-dept-hystrix-8001</artifactId>
     <dependencies>
     	<!--引入hystrix依赖  -->
     	<dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency> 
         <!--这里我们引入自己自定义的api通用包,就可以使用Dept部门实体  --> 
         <dependency>
           <groupId>com.topcheer</groupId>
           <artifactId>microservicecloud-api</artifactId>
           <version>${project.version}</version>
    	</dependency>
    	<dependency>
    	       <groupId>junit</groupId>
    	       <artifactId>junit</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>mysql</groupId>
    	       <artifactId>mysql-connector-java</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>com.alibaba</groupId>
    	       <artifactId>druid</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>ch.qos.logback</groupId>
    	       <artifactId>logback-core</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>org.mybatis.spring.boot</groupId>
    	       <artifactId>mybatis-spring-boot-starter</artifactId>
    	</dependency>
    	<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jetty</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>org.springframework.boot</groupId>
    	       <artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>org.springframework.boot</groupId>
    	       <artifactId>spring-boot-starter-test</artifactId>
    	</dependency>
    	<!--修改后立即热部署  -->
    	<dependency>
    	       <groupId>org.springframework</groupId>
    	       <artifactId>springloaded</artifactId>
    	</dependency>
    	<dependency>
    	       <groupId>org.springframework.boot</groupId>
    	       <artifactId>spring-boot-devtools</artifactId>
    	</dependency>
    	<!--将微服务provider注册进eureka  -->
    	<dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency> 
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-config</artifactId>
        </dependency> 
        <!--添加actuator监控信息完善  -->
        <dependency>
    	       <groupId>org.springframework.boot</groupId>
    	       <artifactId>spring-boot-starter-actuator</artifactId>
    	</dependency>
      </dependencies>
    </project>
  3. 修改application.yml文件内容(这个文件与之前的8001基本没有区别,只有instance-id名称编号了)
     
    server:
      port: 8001 #设置端口为8001
      
    mybatis:
      config-location: classpath:mybatis/mybatis.cfg.xml  #设置mybatis配置文件所在的路径
      type-aliases-package: com.topcheer.springcloud.entities #扫描所有实体类所在包
      mapper-locations:
      - classpath:mybatis/mapper/**/*.xml #扫描mybatis的映射文件
      
    spring:
      application:
        name: microservicecloud-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource #设置当前数据源
        driver-class-name: org.gjt.mm.mysql.Driver #设置mysql驱动包
        url: jdbc:mysql://localhost:3306/cloudDB01 #设置数据库名称
        username: root
        password: 897570
        dbcp2:
          min-idle: 5 #设置数据库连接池的最小维持连接数
          initial-size: 5 #设置初始化链接数
          max-total: 5 #设置最大连接数
          max-wait-millis: 200 #设置链接获取的最大超时时间  
    
    eureka: #这个就是将8001服务端注册进入注册中心,下面的就是注册中心的注册地址
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      instance: 
         instance-id: microservicecloud-dept8001-hystrix #自定义服务名称信息
         prefer-ip-address: true #访问路径可以显示IP地址     
     
    info:
      app.name: topcheer-microservicecloud
      company.name: com.topcheer
      build.artifactId: $project.artifactId$
      build.version: $project.version$   
       
  4. 将之前8001的java代码拷贝过来,部分进行修改
        
     a:修改DeptController.java类,我们对这个类中的get方法进行改造,我们在调用
           这个方法进行查询的时候,传递一个参数,数据库中查询不到,如果返回null,
           那么我们就人为的抛出一个异常,那么我们这里就可以使用hystrix去解决这个
           问题,代码如下:
           
     b:修改启动类DeptProvider_hystrix_8001_App.java
                   
  5. 测试,首先启动3个Eureka的注册中心,再启动microservicecloud-provider-dept-hystrix-8001这个新建的带Hystrix
    的提供者微服务,最后启动我们的80消费者微服务。
     a:访问7001
            
     b:访问我们刚刚创建的get方法,先访问一个存在的数据
           
     c:访问一个不存在的数据
           

三:Hystrix之服务降级

           c:修改microservicecloud-consumer-dept-feign整合了feign的消费者微服务中application.yml文件
                 
           d:测试,首先启动3个Eureka的服务,再启动microservicecloud-provider-dept-8001这个没有加Hystrix的
                提供者微服务,以及后面启动microservicecloud-consumer-dept-feign消费者微服务
                 ①首先正常访问get方法
                        
                  ②下面我们故意关闭microservicecloud-provider-dept-8001微服务
                        

  1.  什么叫做服务降级?(并且上面的Hystrix的@HystrixCommand方式会导致,每多一个方法,就需要
      创建一个fallbackMethod对应的方法,比较麻烦)。
         
      
      简单点说:就是比如现在我们存在3个微服务A,B,C,现在微服务A访问量特别大,销耗的内存特别大,导致
                        整体服务器内存不够,那么现在为了维持服务器的运行不会崩溃,那么我们可以先将微服务C先
                        关掉,等待A的访问量小了,再开启C.
      注意:服务降级处理是在客户端完成的,与服务端没有关系。
  2.  实现步骤如下:
     a:修改microservicecloud-api工程,根据已有的DeptClientService接口,新建一个实现了FallbackFactory接口的类。
              
           
      b:修改DeptClientService这个对应提供者服务端方法调用的接口类
               

四:服务监控之hystrixDashboard

  1.  简介
                
  2. 项目实例步骤
     ⑴新建微服务microservicecloud-consumer-hystrix-dashboard
         
     ⑵修改pom.xml文件,添加依赖
         
    <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">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>com.topcheer</groupId>
        <artifactId>microservicecloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>microservicecloud-consumer-hystrix-dashboard</artifactId>
    <dependencies>
    		<!--引入hystrix-dashboard依赖  -->
    		<dependency>
    		       <groupId>org.springframework.cloud</groupId>
    		       <artifactId>spring-cloud-starter-hystrix</artifactId>
    		</dependency>
    		<dependency>
    		       <groupId>org.springframework.cloud</groupId>
    		       <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    		</dependency>
            <!--这里我们引入自己自定义的api通用包,就可以使用Dept部门实体  --> 
    	    <dependency>
    	       <groupId>com.topcheer</groupId>
    	       <artifactId>microservicecloud-api</artifactId>
    	       <version>${project.version}</version> 
    	    </dependency>
    	     <dependency>
    	       <groupId>org.springframework.boot</groupId>
    	       <artifactId>spring-boot-starter-web</artifactId>
    	    </dependency>
    	    <!--修改后立即热部署  -->
    		<dependency>
    		       <groupId>org.springframework</groupId>
    		       <artifactId>springloaded</artifactId>
    		</dependency>
    		<dependency>
    		       <groupId>org.springframework.boot</groupId>
    		       <artifactId>spring-boot-devtools</artifactId>
    		</dependency>
    		<!--Ribbon相关的依赖 ,ribbon需要和eureka整合,所以需要这个eureka依赖 -->
    		<dependency>
    		       <groupId>org.springframework.cloud</groupId>
    		       <artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    		<dependency>
    		       <groupId>org.springframework.cloud</groupId>
    		       <artifactId>spring-cloud-starter-ribbon</artifactId>
    		</dependency>
    		<dependency>
    		       <groupId>org.springframework.cloud</groupId>
    		       <artifactId>spring-cloud-starter-config</artifactId>
    		</dependency>
      </dependencies>
    </project>

    ⑶修改application.yml文件
         
     ⑷创建启动类DeptConsumer_DashBoard_App
         
     ⑸我们需要监控所有的提供者微服务,那么我们需要在这些微服务中进行配置,都要添加一个actuator依赖
      (8001,8002,8003都添加   即可)
          
      ⑹下面我们单独启动刚刚新建的这个microservicecloud-consumer-hystrix-dashboard微服务,看看是否可以正常启动
          

  3. 上面可以发现我们的hystrix-dashboard已经成功启动,下面我们可以启动其他微服务进行测试了
     a:首先启动3个Eureka注册中心,再启动带hystrix熔断降级的微服务microservicecloud-provider-dept-hystrix-8001,
           最后启动我们新建的microservicecloud-consumer-hystrix-dashboard微服务
     b:效果
           
     c:那么现在我们要使用hystrixdashboard去监控这个8001提供者微服务,该如何做呢?
           地址:http://ip:要监控微服务的端口/hystrix.stream
           
      d:让效果图形化
           
             
      e:  图形化的效果如下
          

  4. 上面图形化的结果看不懂怎办?
      a:7种颜色一一对应
          
      b:一圈一线
           
           
           
       c:下面我们多次通过http://localhost:8001/dept/get/1地址访问,看看图形变化
             
      d:图形中含义
            
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值