文章目录

  • 一、service provider 服务提供者
  • 服务的注册和发现
  • pom.xml 添加 eureka 客户端依赖
  • 上面的操作会在pom.xml中添加以下依赖
  • application.yml 添加 eureka注册配置
  • 主程序启用服务注册发现客户端
  • 启动,并访问 eureka 查看注册信息
  • 二.eureka 和 “服务提供者”的高可用
  • item-service 高可用
  • 配置启动参数
  • 启动测试
  • 访问两个端口测试
  • eureka 高可用
  • application-eureka1.yml
  • application-eureka2.yml
  • 配置启动参数 --spring.profiles.active 和 --server.port
  • eureka客户端注册时,向两个服务器注册
  • 三.zuul API网关
  • 新建 sp11-zuul 项目
  • application.yml
  • 主程序
  • 启动服务,访问测试
  • 三.zuul集成Ribbon
  • 1.zuul + ribbon 负载均衡
  • 2.zuul启用重试(不推荐)
  • 1. 添加 spring-retry 依赖
  • 2.yml配置 `zuul.retryable=true`
  • 3. 配置重试参数(可选)
  • 四.zuul 集成 Hystrix
  • Hystrix是容错和限流工具
  • 1.容错-降级
  • 2.添加Hystrix降级
  • 1.Zuul默认已经启用Hystrix
  • 2.实现FallbackProvider接口,按zuul的规则实现接口的方法
  • 3.添加@Comment
  • 4.降低 hystrix 超时时间,以便测试降级
  • 5.启动服务,测试降级
  • 3.Hystrix限流-熔断
  • 使用 apache 的并发访问测试工具 ab
  • 五.Hystrix dashboard
  • 1.Acuator
  • 2..搭建Hystrix dashboard
  • 1.新建模块: sp07-hystrix-dashboard
  • 2.添加依赖:Hystrix dashboard
  • 3.yml配置
  • 4.启动类添加注解:@EnableHystrixDashBoard
  • 5.访问http://localhost:4001/hystrix
  • 3.Turbine
  • 1.新建模块: sp08-turbine
  • 2.添加依赖
  • 3. yml
  • 4. 启动类注解:`@EnableTurbine`
  • 5.访问测试


一、service provider 服务提供者

spring cloud实战 pdf spring cloud入门教程_服务器

服务的注册和发现

搭建eureka注册中心服务器

  1. 新建 module: sp05-eureka
  2. 调整pom.xml
  • 父项目
  • 添加 eureka server 依赖
  1. yml
  • 关闭自我保护模式
  • 主机名
  • 针对单台服务器,不向自己注册,不从自己拉取
  1. 启动类注解:@EnableEurekaServer 触发 eureka 服务器的自动配置

eureka四条运行机制

  1. 客户端启动时,会反复连接注册中心尝试注册,直到注册成功为止
  2. 客户端每30秒发送一次心跳数据,服务器连续3次收不到一个服务的心跳,会删除它的注册信息
  3. 客户端每30秒拉取一次注册表,刷新本地注册表缓存
  4. 自我保护模式
  • 由于网络中断,15分钟内,85%服务器出现心跳异常,自动进入保护模式,
    自我保护模式下所有的注册信息都不删除
  • 网络恢复后,自动退出保护模式
  • 开发调试期间,可以关闭保护模式,避免影响调试

客户端连接 eureka 注册中心

修改 2,3,4 项目

  1. 添加 eureka client 依赖
  2. yml
    eureka连接地址: http://eureka1:2001/eureka
    修改 item-service、user-service、order-service,把微服务注册到 eureka 服务器

1.pom.xml 添加eureka依赖
2.application.yml 添加eureka注册配置
3.主程序启用eureka客户端
4.启动服务,在eureka中查看注册信息

pom.xml 添加 eureka 客户端依赖

右键点击项目,或点击pom.xml,用 STS 工具编辑起步依赖

spring cloud实战 pdf spring cloud入门教程_spring_02

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_03

spring cloud实战 pdf spring cloud入门教程_服务器_04

上面的操作会在pom.xml中添加以下依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml 添加 eureka注册配置

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka

eureka.instance.lease-renewal-interval-in-seconds

心跳间隔时间,默认 30 秒

defaultZone,默认位置,可以修改为具体地理位置,比如:beiJing, shangHai, shenZhen 等,表示 eureka 服务器的部署位置, 需要云服务器提供

eureka.client.registry-fetch-interval-seconds

拉取注册信息间隔时间,默认 30 秒

主程序启用服务注册发现客户端

修改 item-service、user-service 和 order-service,
主程序添加

@EnableDiscoveryClient

注解

启动,并访问 eureka 查看注册信息

spring cloud实战 pdf spring cloud入门教程_spring_05

http://eureka1:2001spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_06
源码:

二.eureka 和 “服务提供者”的高可用

spring cloud实战 pdf spring cloud入门教程_xml_07


02商品服务

  1. 右键点击02的启动配置
    或者点上面的启动配置下拉菜单
    选择 “Edit Configuration”
  2. 对02创建两个启动配置,设置启动参数--server.port=xxxx

item-service 高可用

启动参数 --server.port 可以覆盖yml中的端口配置

配置启动参数

item-service-8001

–server.port=8001

spring cloud实战 pdf spring cloud入门教程_spring_08


item-service-8002

–server.port=8002

spring cloud实战 pdf spring cloud入门教程_cloud_09

启动测试

访问 eureka 查看 item-service 注册信息

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_10

访问两个端口测试

http://localhost:8001/35 http://localhost:8002/35

eureka 高可用

添加两个服务器的 profile 配置文件

application-eureka1.yml

eureka:
  instance:
    hostname: eureka1
  client:
    register-with-eureka: true  #profile的配置会覆盖公用配置
    fetch-registry: true        #profile的配置会覆盖公用配置
    service-url: 
      defaultZone: http://eureka2:2002/eureka  #eureka1启动时向eureka2注册

application-eureka2.yml

eureka:
  instance:
    hostname: eureka2
  client:
    register-with-eureka: true  #profile的配置会覆盖公用配置
    fetch-registry: true        #profile的配置会覆盖公用配置
    service-url: 
      defaultZone: http://eureka1:2001/eureka  #eureka2启动时向eureka1注册

配置启动参数 --spring.profiles.active 和 --server.port

eureka1 启动参数:
–spring.profiles.active=eureka1 --server.port=2001

eureka2 启动参数:

–spring.profiles.active=eureka2 --server.port=2002

spring cloud实战 pdf spring cloud入门教程_服务器_11


访问 eureka 服务器,查看注册信息

http://eureka1:2001/

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_12

http://eureka2:2002/

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_13

eureka客户端注册时,向两个服务器注册

修改以下微服务

sp02-itemservice
sp03-userservice
sp04-orderservice

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

当一个 eureka 服务宕机时,仍可以连接另一个 eureka 服务

源码: https://github.com/benwang6/spring-cloud-repo 5484

三.zuul API网关

spring cloud实战 pdf spring cloud入门教程_spring_14


zuul API 网关,为微服务应用提供统一的对外访问接口。

zuul 还提供过滤器,对所有微服务提供统一的请求校验。

  1. 统一的访问入口
  2. 统一的权限校验
  3. 集成 Ribbon 负载均衡和重试
  4. 集成 Hystrix 容错和限流

统一的访问入口

  1. 新建模块: sp06-zuul
  2. 添加依赖:
  • eureka client
  • zuul
  • sp01
  1. yml 配置路由转发规则
#  **包含深层路径
#  * 只包含一层路径

# 服务id设置成访问子路径,是默认规则,
# zuul根据注册表的注册信息完成自动配置
# 最好手动配置,防止注册表不全
zuul:
  routes:
    item-service: /item-service/**
    user-service: /user-service/**
    order-service: /order-service/**
  1. 启动类添加注解 @EnableZuulProxy

zuul统一权限校验

http://localhost:3001/item-service/t45t4 没有登录不能访问

http://localhost:3001/item-service/t45t4?token=65345rt 已经登录过,可以访问

  1. 新建 ZuulFilter 子类
  2. 按 zuul 的规则实现
  3. 添加 @Component 注解

zuul 的自动配置类可以在 spring 容器中自动发现过滤器实例,完成自动配置

新建 sp11-zuul 项目

spring cloud实战 pdf spring cloud入门教程_cloud_15


spring cloud实战 pdf spring cloud入门教程_spring_16


pom.xml

需要添加 sp01-commons 依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>springcloud1</artifactId>
		<groupId>cn.tedu</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>sp06-zuul</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sp06-zuul</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>

	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
		<dependency>
			<groupId>cn.tedu</groupId>
			<artifactId>sp01-commons</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

application.yml

zuul 路由配置可以省略,缺省以服务 id 作为访问路径

spring:
  application:
    name: zuul

server:
  port: 3001

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

zuul:
  routes:
    item-service: /item-service/**
    user-service: /user-service/**
    order-service: /order-service/**

主程序

添加 @EnableZuulProxy 和 @EnableDiscoveryClient 注解

package cn.tedu.sp06;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringBootApplication
public class Sp06ZuulApplication {

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

}

启动服务,访问测试

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_17

添加链接描述

添加链接描述

http://localhost:3001/item-service/decreaseNumber

使用postman,POST发送以下格式数据:

[{"id":1, "name":"abc", "number":23},{"id":2, "name":"def", "number":11}]

添加链接描述

添加链接描述

http://localhost:3001/order-service/123abc
http://localhost:3001/order-service/

三.zuul集成Ribbon

1.zuul + ribbon 负载均衡

  • 默认启用了负载均衡
  • 默认没有启用重试
  • 在入口位置进行重试,会造成后台大面积服务压力翻倍,可能造成故障传播、雪崩

2.zuul启用重试(不推荐)

1. 添加 spring-retry 依赖
<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>
2.yml配置 zuul.retryable=true
需要开启重试,默认不开启

spring cloud实战 pdf spring cloud入门教程_cloud_18

3. 配置重试参数(可选)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>springcloud1</artifactId>
		<groupId>cn.tedu</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>sp06-zuul</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sp06-zuul</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>

	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
		<dependency>
			<groupId>cn.tedu</groupId>
			<artifactId>sp01-commons</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>

	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

四.zuul 集成 Hystrix

Hystrix是容错和限流工具

1.容错-降级

调用后台服务出错(异常,阻塞,服务崩溃),可以执行当前服务的一段代码,直接向客户端返回降级结果

  • 错误提示
  • 缓存的结果
  • 根据业务逻辑,返回任意的结果
2.添加Hystrix降级
1.Zuul默认已经启用Hystrix
2.实现FallbackProvider接口,按zuul的规则实现接口的方法

ItemServiceFallback

package cn.tedu.sp06.fb;

import cn.tedu.web.util.JsonResult;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

@Component
public class ItemFB implements FallbackProvider {
    /**
     * 设置调用哪个后台服务,会应用当前降级类
     * ”item-service“ 只针对商品降级
     * “*”对所有服务都降级
     * null 对所有服务都降级
     *
     * @return
     */
    @Override
    public String getRoute() {
        return "item-service";
    }
    // 发回給客户端的降级响应数据
    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return null;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.INTERNAL_SERVER_ERROR.value();
            }

            @Override
            public String getStatusText() throws IOException {
                return HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase();
            }

            @Override
            public void close() {
                //用来关闭下列方法中的流
                //BAIS 流内存数据的流,不占用底层系统资源,不需要关闭
            }

            @Override
            public InputStream getBody() throws IOException {
                //JsonResult - {code:500,msg:调用商品失败,data:null}
                String json = JsonResult.err().code(500).msg("调用商品失败").toString();
                return new ByteArrayInputStream(json.getBytes("UTF-8"));
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders h = new HttpHeaders();
                h.add("Content-type", "application/json;charset=UTF-8");
                return  h;
            }
        };
    }
}

OrderServiceFallback

package cn.tedu.sp06.fb;
import cn.tedu.web.util.JsonResult;
 import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.client.ClientHttpResponse;
 import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;@Component
 public class OrderFB implements FallbackProvider {
 /**
 * 设置调用哪个后台服务,会应用当前降级类
 * ”order-service“ 只针对订单品降级
 * “*”对所有服务都降级
 * null 对所有服务都降级
 *
 * @return
 */
 @Override
 public String getRoute() {
 return “order-service”;
 }
 // 发回給客户端的降级响应数据
 @Override
 public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
 return new ClientHttpResponse() {
 @Override
 public HttpStatus getStatusCode() throws IOException {
 return null;
 }
@Override
        public int getRawStatusCode() throws IOException {
            return HttpStatus.INTERNAL_SERVER_ERROR.value();
        }

        @Override
        public String getStatusText() throws IOException {
            return HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase();
        }

        @Override
        public void close() {
            //用来关闭下列方法中的流
            //BAIS 流内存数据的流,不占用底层系统资源,不需要关闭
        }

        @Override
        public InputStream getBody() throws IOException {
            //JsonResult - {code:500,msg:调用订单失败,data:null}
            String json = JsonResult.err().code(500).msg("调用订单失败").toString();
            return new ByteArrayInputStream(json.getBytes("UTF-8"));
        }

        @Override
        public HttpHeaders getHeaders() {
            HttpHeaders h = new HttpHeaders();
            h.add("Content-type", "application/json;charset=UTF-8");
            return  h;
        }
    };
}

}

3.添加@Comment

spring cloud实战 pdf spring cloud入门教程_spring_19


spring cloud实战 pdf spring cloud入门教程_spring_20

4.降低 hystrix 超时时间,以便测试降级
spring:
  application:
    name: zuul
    
server:
  port: 3001
  
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

zuul:
  retryable: true
    
ribbon:
  ConnectTimeout: 1000
  ReadTimeout: 2000
  MaxAutoRetriesNextServer: 1
  MaxAutoRetries: 1
  
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 500
5.启动服务,测试降级

添加链接描述

spring cloud实战 pdf spring cloud入门教程_spring_21

3.Hystrix限流-熔断

spring cloud实战 pdf spring cloud入门教程_spring_22


hystrix 对请求的降级和熔断,可以产生监控信息,hystrix dashboard可以实时的进行监控

  • 当流量过大,造成后台服务故障,可以断开链路,限制后台服务的访问流量,等待后台服务恢复
  • 断路器打开的条件
  • 10s 20次请求(必须首先满足)
  • 50%出错,执行降级代码
  • 半开状态
  • 断路器打开一段时间后,会进入半开状态
  • 会尝试发送一次客户端调用,
  • 成功,关闭断路器
  • 失败,继续保持打开状态
使用 apache 的并发访问测试工具 ab

添加链接描述

spring cloud实战 pdf spring cloud入门教程_spring_23


用 ab 工具,以并发50次,来发送20000个请求

ab -n 20000 -c 50 http://localhost:3001/item-service/35

断路器状态为 Open,所有请求会被短路,直接降级执行 fallback 方法

spring cloud实战 pdf spring cloud入门教程_spring_24

五.Hystrix dashboard

Hystrix数据健康仪表盘
Hystrix日志,是通过Actuator工具来暴露出来

1.Acuator

springboot提供的一个项目指标工具,可以通过Actuator获取项目的各种日志数据

  • 健康状态
  • spring容器中的所有的对象
  • spring mvc映射的所有路径
  • jvm堆内存镜像

添加Actuator

1.添加actuator,默认添加过了

spring cloud实战 pdf spring cloud入门教程_xml_25

2.暴露监控日志

m.e.w.e.i = “*” 暴露所有日志
m.e.w.e.i = health 暴露健康状态日志
m.e.w.e.i = health,beans,mapping,hystrix.stream 暴露多种日志

spring cloud实战 pdf spring cloud入门教程_服务器_26

3.查看日志
[添加链接描述](http://localhost:3001/actuator)

spring cloud实战 pdf spring cloud入门教程_spring_27

2…搭建Hystrix dashboard

Hystrix dashboard 仪表盘

spring cloud实战 pdf spring cloud入门教程_cloud_28

1.新建模块: sp07-hystrix-dashboard

spring cloud实战 pdf spring cloud入门教程_xml_29

2.添加依赖:Hystrix dashboard

spring cloud实战 pdf spring cloud入门教程_xml_30

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>springcloud1</artifactId>
		<groupId>cn.tedu</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>

	
	<artifactId>sp07-hystrix-dashboard</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sp07-hystrix-dashboard</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>
3.yml配置

允许抓取的的服务器列表:localhost

server:
  port: 4001
# - 代表数组或list
hystrix:
  dashboard:
    proxy-stream-allow-list:
      - localhost
4.启动类添加注解:@EnableHystrixDashBoard
package cn.tedu.sp07;

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

@EnableHystrixDashboard
@SpringBootApplication
public class Sp07HystrixDashboardApplication {

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

}
5.访问http://localhost:4001/hystrix

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_31

填入 hystrix 的监控端点,开启监控

添加链接描述

spring cloud实战 pdf spring cloud入门教程_cloud_32






spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_33


spring cloud实战 pdf spring cloud入门教程_服务器_34

3.Turbine

聚合多台服务器的日志数据,提供给仪表盘显示

1.新建模块: sp08-turbine

spring cloud实战 pdf spring cloud入门教程_cloud_35

spring cloud实战 pdf spring cloud入门教程_xml_36


turbine依赖需手动添加

spring cloud实战 pdf spring cloud入门教程_xml_37

2.添加依赖
  • eureka client
  • turbine
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>springcloud1</artifactId>
		<groupId>cn.tedu</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>


	<artifactId>sp08-turbine</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sp08-turbine</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
		</dependency>
	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>
3. yml
聚合的服务: zuul
为聚合的日志数据命名:new String("default")
spring:
  application:
    name: turbine
# 2001 eureka
# 3001 zuul
# 4001 hystrix dashboard
server:
  port: 5001
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
turbine:
  app-config: zuul
  cluster-name-expression: new String("default")
4. 启动类注解:@EnableTurbine
package cn.tedu.sp08;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

@EnableTurbine
@SpringBootApplication
public class Sp08TurbineApplication {

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

}
5.访问测试

8201服务器产生监控数据:

8202服务器产生监控数据:

turbine 监控路径

在 hystrix dashboard 中填入turbine 监控路径,开启监控

turbine聚合了order-service两台服务器的hystrix监控信息

spring cloud实战 pdf spring cloud入门教程_spring cloud实战 pdf_38


源码:

合并的日志地址: http://localhost:5001/turbine.stream