SpringCloud入门(五)之Hystrix(下)

导读:本篇文章讲解 SpringCloud入门(五)之Hystrix(下),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

本篇文章是继上一篇SpringCloud入门(五)之Hystrix(上)之后的,因此目录也是从之下的第三开始。

三,服务降级

服务降级就是系统整体资源快不够了,忍痛先将某些服务先关掉,待渡过难关,再开启回来。 让客户端在服务端不可用时也会获得提示信息而不会挂起耗死服务器。

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

3.1 pom.xml

先在公共模块servicecloud-api工程的pom.xml新增Feign坐标:

		<!-- 添加声明式feign依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>

3.2 实现FallbackFactory接口

同样在公共模块servicecloud-api工程,根据已经有的DeptClientService接口新建一个实现了FallbackFactory接口的DeptClientServiceFallbackFactory(该类要实现注解@Component):

package com.lmc.springcloud.service;

import java.util.List;

import org.springframework.stereotype.Component;

import com.lmc.springcloud.entities.Dept;

import feign.hystrix.FallbackFactory;

@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> {

	@Override
	public DeptClientService create(Throwable cause) {
		return new DeptClientService() {
			
			@Override
			public List<Dept> list() {
				// TODO Auto-generated method stub
				return null;
			}
			
			@Override
			public Dept get(long id) {
				// TODO Auto-generated method stub
				return new Dept().setDeptno(id)
			               .setDname("该ID:"+id+"没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
			               .setDb_source("no this database in MySQL");
			}
			
			@Override
			public boolean add(Dept dept) {
				// TODO Auto-generated method stub
				return false;
			}
		};
	}

}

3.3 注解添加fallbackFactory属性

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

package com.lmc.springcloud.service;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.lmc.springcloud.entities.Dept;

@FeignClient(value = "SERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService {
	
	  @RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
	  public Dept get(@PathVariable("id") long id);
	
	  @RequestMapping(value = "/dept/list",method = RequestMethod.GET)
	  public List<Dept> list();

	  @RequestMapping(value = "/dept/add",method = RequestMethod.POST)
	  public boolean add(Dept dept);

}

然后再重新对公共模块进行Maven的clean和install。

3.4 application.yml

在servicecloud-consumer-dept-feign工程修改YML,打开Feign熔断:

server:
   port: 80
   
feign: 
   hystrix: 
      enabled: true

eureka:
  client:
    register-with-eureka: false
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

3.5 测试

  1. 3个eureka先启动
  2. 微服务servicecloud-provider-dept-8001启动
  3. servicecloud-consumer-dept-feign启动
  4. 访问http://localhost/consumer/dept/get/1
  5. 故意关闭微服务servicecloud-provider-dept-8001
  6. http://localhost/consumer/dept/get/1

四,服务监控hystrixDashboard

​ 除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容转化成可视化界面。

4.1 pom.xml

新建工程servicecloud-consumer-hystrix-dashboard,在pom.xml增加hystrix-dashboard坐标:

	<!-- hystrix和 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> 

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.lmc</groupId>
    <artifactId>servicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>servicecloud-consumer-hystrix-dashboard</artifactId>
  
  <dependencies>

   <!-- 自己定义的api -->
   <dependency>
     <groupId>com.lmc</groupId>
     <artifactId>servicecloud-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相关 -->

   <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>

   <!-- feign相关 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-feign</artifactId>
   </dependency>

   <!-- hystrix和 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> 

  </dependencies>
</project>

4.2 application.yml

新建application.yml配置文件:

server:
   port: 9001

4.3 启动类

新建启动类DeptConsumer_DashBoard_App,加入@EnableHystrixDashboard注解:

package com.lmc.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableHystrixDashboard
public class DeptConsumer_DashBoard_App {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SpringApplication.run(DeptConsumer_DashBoard_App.class,args);
	}

}

此时,访问 http://localhost:9001/hystrix ,就会显示下面的页面:

在这里插入图片描述

参数 含义
Delay 该参数用来控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。
Title 该参数对应了头部标题Hystrix Stream之后的内容,默认会使用具体监控实例的URL,可以通过配置该信息来展示更合适的标题。

注意,Hystrix-DashBoard是对服务提供者的监控,因此要保证每个服务提供者(8001/8002/8003)都有监控依赖配置:

	<!-- actuator监控信息完善 -->
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
   </dependency>

4.4 监控服务

4.4.1 开启服务

先按顺序启动服务:

  1. 启动servicecloud-consumer-hystrix-dashboard该微服务监控消费端
  2. 启动3个eureka集群
  3. 启动servicecloud-provider-dept-hystrix-8001

4.4.2 开启服务监控

访问http://localhost:9001/hystrix,先多次访问刷新http://localhost:8001/dept/get/1,在页面的第一个长框输入服务提供者http://localhost:8001/hystrix.stream,再自定义下面两个框,点击【Monitor Stream】,得到效果如下:

在这里插入图片描述

4.4.3 监控信息解读

实心圆:共有两种含义。它通过颜色的变 化代表了实例的健康程度,它的健康度从绿色<黄色<橙色<红色递减。

该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。所以通过该实心圆的展示,就可以在大量的实例中快速的发现故障实例和高压力实例。

曲线:用来记录2分钟内流量的相对变化,可以通过它来观察到流量的上升和下降趋势。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81639.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!