springcloud Finchley 版本hystrix 和 hystrix Dashboard
hystrix的断路功能
引用上个项目,创建新的model ,cloud-hystrix
pom.xml
<?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">
<modelVersion>4.0.0</modelVersion> <groupId>com.zhaowb.springcloud</groupId>
<artifactId>cloud-hystrix</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>cloud-hystrix</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>com.example</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.zhaowb.springcloud</groupId>
<artifactId>cloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
主要的依赖是
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在启动类上加上注解
package com.zhaowb.springcloud.cloudhystrix; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix; @SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
@EnableHystrix
public class CloudHystrixApplication { public static void main(String[] args) {
SpringApplication.run(CloudHystrixApplication.class, args);
}
}
然后将eureka-hi 的 controller ,dao,service,resource 下mybatis相关 复制过来,修改DeptMapper.xml中的namespace 为当前项目下的Deptdao,这个一定要修改,否则会报找不到该类下的方法,修改controller
package com.zhaowb.springcloud.cloudhystrix.controller; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.zhaowb.springcloud.cloudapi.entities.Dept;
import com.zhaowb.springcloud.cloudhystrix.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import java.util.List; @RestController
public class DeptController { @Autowired
private DeptService service; @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
public boolean add(@RequestBody Dept dept) {
return service.add(dept);
} @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
@HystrixCommand(fallbackMethod = "getDeptError")
public Dept get(@PathVariable("id") Long id) {
Dept dept = service.get(id);
if (dept == null){
throw new RuntimeException("dept is null id =" + id);
}
return service.get(id);
} public Dept getDeptError(@PathVariable("id") Long id){
Dept dept = new Dept();
dept.setDeptno(id);
dept.setDname("该ID:" + id + "没有没有对应的信息,null--@HystrixCommand");
dept.setDb_source("no this database in MySQL");
return dept;
} @RequestMapping(value = "/dept/list", method = RequestMethod.GET)
public List<Dept> list() {
return service.list();
}
}
代码已经完成,启动eureka-server ,cloud-hystrix,在浏览器输入http://localhost:8766/dept/get/1,
显示查询结果,eptno":1,"dname":"部门1","db_source":"clouddb01"},
然后在浏览器输入http://localhost:8766/dept/get/555,查询结果为{"deptno":555,"dname":"该ID:555没有没有对应的信息,null--@HystrixCommand","db_source":"no this database in MySQL"}。说明hystrix的断路功能实现成功。我数据库只有几条数据,555为在数据库没有该id的任意数字都可。
hystrix 的fallbackFactory实现
修改cloud-api ,类
package com.zhaowb.springcloud.cloudapi.service; import com.zhaowb.springcloud.cloudapi.entities.Dept;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import feign.hystrix.FallbackFactory; import java.util.List; @Component
public class IDeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> { private static final Logger logger = LoggerFactory.getLogger(IDeptClientServiceFallbackFactory.class); @Override
public DeptClientService create(Throwable cause) {
return new DeptClientService() {
@Override
public Dept get(long id) { logger.info("DeptClientServiceFallbackFactory.DeptClientService.get id= " + id);
logger.info("错误信息:" + cause);
Dept dept = new Dept();
dept.setDeptno(id);
dept.setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭");
dept.setDb_source("no this database in MySQL");
return dept;
} @Override
public List<Dept> list() {
return null;
} @Override
public boolean add(Dept dept) {
return false;
}
};
}
}
@Component 必须要有。
在DeptClientService增加
@FeignClient(value = "eureka-client-hi", fallbackFactory = IDeptClientServiceFallbackFactory.class)
修改cloud-feign,增加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
Feign是自带断路器的,在D版本的Spring Cloud之后,它没有默认打开。需要在配置文件中配置打开它,修改配置文件,application.yml
feign:
hystrix:
enabled: true
这样基本上可以了,如果依然扫描不到包,怎添加上下边这个注解
@ComponentScan(basePackages = {"com.zhaowb.springcloud.servicefeign","com.zhaowb.springcloud.cloudapi.service"}) // 参考https://my.oschina.net/u/2948566/blog/1591147
这样扫描就可以了,如果能扫描到就不需要添加。我是遇到了扫描不到的情况,需要添加。
然后启动,eureka-server,eureka-hi,cloud-feign,在浏览器输入http://localhost:8765//consumer/dept/get/1,能正常访问,然后关闭eureka-hi,刷新浏览器,
{"deptno":1,"dname":"该ID:1没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭","db_source":"no this database in MySQL"}验证成功。
Hystrix Dashboard监控
在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型。断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。
新建model,cloud-hystrix-dashboard,引入依赖,有人说spring-boot-starter-actuato也是必须引用的 ,但是我没有引入,也能运行,就没有引入。
<?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">
<modelVersion>4.0.0</modelVersion> <groupId>com.zhaowb.springcloud</groupId>
<artifactId>cloud-hystrix-dashboard</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>cloud-hystrix-dashboard</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>com.example</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.zhaowb.springcloud</groupId>
<artifactId>cloud-api</artifactId>
<version>${project.version}</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
配置application.yml
server:
port: 8767 management:
endpoints:
web:
exposure:
include: hystrix.stream
在启动类上加上@EnableHystrixDashboard开启HystrixDashboard
package com.zhaowb.springcloud.cloudhystrixdashboard; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; @SpringBootApplication
@EnableHystrixDashboard
public class CloudHystrixDashboardApplication { public static void main(String[] args) {
SpringApplication.run(CloudHystrixDashboardApplication.class, args);
}
}
修改cloud-hystrix的启动类,在启动类上CloudHystrixApplication添加@EnableHystrix注解开启断路器。
依次启动eureka-server,cloud-hystrix,cloud-hystrix-dashboard,打开,http://localhost:8766/dept/get/1,
http://localhost:8766/actuator/hystrix.stream 会有ping: data:{...}
打开locahost:8767/hystrix会有一个豪猪的图片显示说明成功。在界面一次填入http://localhost:8766/actuator/hystrix.stream ,2000,hellokity,分别为,监控的微服务的hystrix地址,延迟时间毫秒,title,点击Monitor Stream ,刷新http://localhost:8766/dept/get/1,就会有图像页面显示。
springcloud Finchley 版本hystrix 和 hystrix Dashboard的更多相关文章
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
- SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据
简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...
- SpringCloud 在Feign上使用Hystrix(断路由)
SpringCloud 在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...
- SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
一.spring cloud简介 鉴于<史上最简单的Spring Cloud教程>很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEAS ...
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 本文出自方志朋的博客 一.spring ...
- 关于springcloud hystrix 执行 hystrix.stream 跳转失败的问题
经过观看网友的总结:应该时版本的问题.某些版本没有对/hystrix.stream进行配置 所以解决方案(网友答案): 需要配置类配置下面 @Bean public ServletRegistrati ...
- springcloud费话之断路器(hystrix in feign)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- SpringCloud(五)学习笔记之Hystrix
在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务故障,从而导致整个系统故障.这种现象被称为服务雪崩效应. Hystrix组件就可以解决此类问题,Hystr ...
- 每天学点SpringCloud(六):Hystrix使用
Hystrix是一个实现断路器模式的库.什么是断路器模式呢?就像我们家庭中的电闸一样,如果有那一处出现意外,那么电闸就会立刻跳闸来防止因为这一处意外而引起更大的事故,直到我们确认处理完那一处意外后才可 ...
随机推荐
- SXOI2018酱油记
Day 0: 嗯前一天刚听说要去参加省选(可能以前也说了不过没听见),作为弱省高一的蒟蒻准备去打打酱油.下午去五中试机啥也没敲晃荡一圈又回去了.今年来也就是打打酱油心情自然是很平静,真不知道明年现在我 ...
- NX二次开发-UFUN移动工程图视图到另一个图纸页UF_DRAW_move_view_to_drawing
#include <uf.h> #include <uf_draw.h> #include <uf_obj.h> UF_initialize(); //找名字获取视 ...
- mac 安装配置使用 mongoldb
mac 安装配置使用 mongoldb 安装和配置 brew install mongos brew install mongo # 密码就是用户的密码 # 配置数据文件 //如果不配置会出现错误62 ...
- 1.RabbitMQ介绍
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间 ...
- SPSS进行数据分析的一般步骤
SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的一般步骤 利用SPSS进行数据分析的关键在于遵循数据分析的一般步骤,但涉及的方面会相对较少.主要集中在以下几个阶段. 1.SPSS数据的准备阶 ...
- BackgroundWorker study
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Git及github使用(二)上传项目
接上篇中创建好的项目. 1.进入到相应的目录右键Git bash here打开客户端 2.创建一个readme文本 $ echo "# Python日常记录积累" >> ...
- java-day17
软件结构:C/S客户端和服务器结构,B/S浏览器和服务器结构 网络通信协议 TCP:传输控制协议,面向连接的通信协议,即传输数据之前,发送端和接收端建立逻辑连接,然后再传输数据. 三次握手 UDP:用 ...
- 第六天 函数与lambda表达式、函数应用与工具
一.函数 1.匹配 位置匹配 def func(a,b,c): print(a,b,c) func(c=1,a=2,b=3) 2 3 1 def func(a, b=2, c=3): print(a, ...
- GetOpenFilename的基本用法
GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...