Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪

文章目录

  • 分布式配置中心
    • 分布式配置中心服务端
      • 创建项目pom文件
      • Application
      • application.yml
      • 测试
      • 附:HTTP 请求地址和资源文件映射
    • 分布式配置中心客户端
      • 概述
      • Application
      • application.yml
          • `注意事项:`
      • 创建测试用 Controller
      • 测试访问
    • 附:开启 Spring Boot Profile启动环境
  • 服务链路追踪ZipKin
    • 概述
    • ZipKin 简介
    • 服务追踪说明
    • 术语解释
    • 创建 ZipKin 服务端
    • Application
    • application.yml
    • 追踪服务
    • 测试追踪
  • Spring Boot 监控管理系统 Admin
    • Spring Boot Admin 服务端
      • 创建 Spring Boot Admin Server
      • Application
      • application.yml
      • 测试访问监控中心
    • Spring Boot Admin 客户端
      • 创建 Spring Boot Admin Client
      • Application
      • application.yml
      • 测试服务监控
      • WallBoard
      • Journal

分布式配置中心

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在 Spring Cloud 中,有分布式配置中心组件 Spring Cloud Config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程 Git 仓库中。在 Spring Cloud Config 组件中,分两个角色,一是 Config Server,二是 Config Client。



分布式配置中心服务端

创建项目pom文件

创建一个工程名为 hello-spring-cloud-config 的项目,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.0modelVersion>

    <parent>
        <groupId>com.funtlgroupId>
        <artifactId>hello-spring-cloud-dependenciesartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../hello-spring-cloud-dependencies/pom.xmlrelativePath>
    parent>

    <artifactId>hello-spring-cloud-configartifactId>
    <packaging>jarpackaging>

    <name>hello-spring-cloud-configname>
    <url>http://www.funtl.comurl>
    <inceptionYear>2018-NowinceptionYear>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-config-serverartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
        
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <mainClass>com.funtl.hello.spring.cloud.config.ConfigApplicationmainClass>
                configuration>
            plugin>
        plugins>
    build>
project>

主要增加了 spring-cloud-config-server 依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-config-serverartifactId>
dependency>

Application

通过 @EnableConfigServer 注解,开启配置服务器功能

package com.funtl.hello.spring.cloud.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}

application.yml

增加 Config 相关配置,并设置端口号为:8888

spring:
  application:
    name: hello-spring-cloud-config
  cloud:
    config:
      label: master
      server:
        git:
          uri: https://github.com/topsale/spring-cloud-config
          search-paths: respo
          username:
          password:

server:
  port: 8888

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

相关配置说明,如下:

spring.cloud.config.label:配置仓库的分支
spring.cloud.config.server.git.uri:配置 Git 仓库地址(GitHub、GitLab、码云 …)
spring.cloud.config.server.git.search-paths:配置仓库路径(存放配置文件的目录)
spring.cloud.config.server.git.username:访问 Git 仓库的账号
spring.cloud.config.server.git.password:访问 Git 仓库的密码
注意事项:

如果使用 GitLab 作为仓库的话,git.uri 需要在结尾加上 .git,GitHub 则不用

测试

浏览器端访问:http://localhost:8888/config-client/dev/master 显示如下:

<Environment> 
  <name>config-clientname>  
  <profiles> 
    <profiles>devprofiles> 
  profiles>  
  <label>masterlabel>  
  <version>9646007f931753d7e96a6dcc9ae34838897a91dfversion>  
  <state/>  
  <propertySources> 
    <propertySources> 
      <name>https://github.com/topsale/spring-cloud-config/respo/config-client-dev.ymlname>  
      <source> 
        <foo>foo version 1foo>  
        <demo.message>Hello Spring Configdemo.message> 
      source> 
    propertySources> 
  propertySources> 
Environment>

证明配置服务中心可以从远程程序获取配置信息

附:HTTP 请求地址和资源文件映射

http://ip:port/{application}/{profile}[/{label}]
http://ip:port/{application}-{profile}.yml
http://ip:port/{label}/{application}-{profile}.yml
http://ip:port/{application}-{profile}.properties
http://ip:port/{label}/{application}-{profile}.properties



分布式配置中心客户端

概述

创建一个工程名为hello-spring-cloud-config-client的项目,pom.xml 文件配置如下:



    4.0.0

    
        com.funtl
        hello-spring-cloud-dependencies
        1.0.0-SNAPSHOT
        ../hello-spring-cloud-dependencies/pom.xml
    

    hello-spring-cloud-config-client
    jar

    hello-spring-cloud-config-client
    http://www.funtl.com
    2018-Now

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        

        
        
            org.springframework.cloud
            spring-cloud-starter-config
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    com.funtl.hello.spring.cloud.config.client.ConfigClientApplication
                
            
        
    

主要增加了 spring-cloud-starter-config 依赖


    org.springframework.cloud
    spring-cloud-starter-config

Application

入口类没有需要特殊处理的地方,代码如下:

package com.funtl.hello.spring.cloud.config.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

application.yml

增加 Config Client 相关配置,并设置端口号为:8889

spring:
  application:
    name: hello-spring-cloud-config-client
  cloud:
    config:
      uri: http://localhost:8888
      name: config-client
      label: master
      profile: dev

server:
  port: 8889

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

相关配置说明,如下:

  • spring.cloud.config.uri:配置服务中心的网址
  • spring.cloud.config.name:配置文件名称的前缀
  • spring.cloud.config.label:配置仓库的分支
  • spring.cloud.config.profile:配置文件的环境标识
    dev:表示开发环境
    test:表示测试环境
    prod:表示生产环境
注意事项:

配置服务器的默认端口为 locagost:8888,如果修改了默认端口,则客户端项目就不能在application.ymlapplication.properties 中配置 spring.cloud.config.uri,必须在 bootstrap.yml或是 bootstrap.properties中配置,原因是 bootstrap开头的配置文件会被优先加载和配置,切记。

创建测试用 Controller

我们创建一个 Controller 来测试一下通过远程仓库的配置文件注入 foo 属性

package com.funtl.hello.spring.cloud.config.client.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestConfigController {

    @Value("${foo}")
    private String foo;

    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    public String hi() {
        return foo;
    }
}

一般情况下,能够正常启动服务就说明注入是成功的。

测试访问

浏览器端访问:http://localhost:8889/hi 显示如下:

foo version 1

附:开启 Spring Boot Profile启动环境

我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是 Spring 中为我们提供了Profile这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的Profile就可以了。

操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.ymlapplication-prod.yml, 启动项目时只需要增加一个命令参数--spring.profiles.active=dev或则--spring.profiles.active=prod即可,启动命令如下:

java -jar hello-spring-cloud-web-admin-feign-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod

服务链路追踪ZipKin

概述

这篇文章主要讲解服务追踪组件 ZipKin。

ZipKin 简介

ZipKin 是一个开放源代码的分布式跟踪系统,由 Twitter 公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。它的理论模型来自于 Google Dapper 论文。

每个服务向 ZipKin 报告计时数据,ZipKin 会根据调用关系通过 ZipKin UI 生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。

服务追踪说明

微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第1张图片

随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:
Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第2张图片

术语解释

Span:基本工作单元,例如,在一个新建的 Span 中发送一个 RPC 等同于发送一个回应请求给 RPC,Span 通过一个 64 位 ID 唯一标识,Trace 以另一个 64 位 ID 表示。
Trace:一系列 Spans 组成的一个树状结构,例如,如果你正在运行一个分布式大数据工程,你可能需要创建一个 Trace。
Annotation:用来即使记录一个事件的存在,一些核心 Annotations 用来定义一个请求的开始和结束
cs:Client Sent,客户端发起一个请求,这个 Annotation 描述了这个 Span 的开始
sr:Server Received,服务端获得请求并准备开始处理它,如果将其 sr 减去 cs 时间戳便可得到网络延迟
ss:Server Sent 表明请求处理的完成(当请求返回客户端),如果 ss 减去 sr 时间戳便可得到服务端需要的处理请求时间
cr:Client Received 表明 Span 的结束,客户端成功接收到服务端的回复,如果 cr 减去 cs 时间戳便可得到客户端从服务端获取回复的所有所需时间
将 Span 和 Trace 在一个系统中使用 Zipkin 注解的过程图形化:
Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第3张图片

创建 ZipKin 服务端

创建一个工程名为 hello-spring-cloud-zipkin 的项目,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.0modelVersion>

    <parent>
        <groupId>com.funtlgroupId>
        <artifactId>hello-spring-cloud-dependenciesartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../hello-spring-cloud-dependencies/pom.xmlrelativePath>
    parent>

    <artifactId>hello-spring-cloud-zipkinartifactId>
    <packaging>jarpackaging>

    <name>hello-spring-cloud-zipkinname>
    <url>http://www.funtl.comurl>
    <inceptionYear>2018-NowinceptionYear>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        

        
        <dependency>
            <groupId>io.zipkin.javagroupId>
            <artifactId>zipkinartifactId>
        dependency>
        <dependency>
            <groupId>io.zipkin.javagroupId>
            <artifactId>zipkin-serverartifactId>
        dependency>
        <dependency>
            <groupId>io.zipkin.javagroupId>
            <artifactId>zipkin-autoconfigure-uiartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
        
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <mainClass>com.funtl.hello.spring.cloud.zipkin.ZipKinApplicationmainClass>
                configuration>
            plugin>
        plugins>
    build>
project>

主要增加了 3 个依赖,io.zipkin.java:zipkin、io.zipkin.java:zipkin-server、io.zipkin.java:zipkin-autoconfigure-ui

<dependency>
    <groupId>io.zipkin.javagroupId>
    <artifactId>zipkinartifactId>
dependency>
<dependency>
    <groupId>io.zipkin.javagroupId>
    <artifactId>zipkin-serverartifactId>
dependency>
<dependency>
    <groupId>io.zipkin.javagroupId>
    <artifactId>zipkin-autoconfigure-uiartifactId>
dependency>

注意版本号为:2.10.1,这里没写版本号是因为我已将版本号托管到 dependencies 项目中

Application

通过 @EnableZipkinServer 注解开启 Zipkin Server 功能

package com.funtl.hello.spring.cloud.zipkin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import zipkin.server.internal.EnableZipkinServer;

@SpringBootApplication
@EnableEurekaClient
@EnableZipkinServer
public class ZipKinApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipKinApplication.class, args);
    }
}

application.yml

设置端口号为:9411,该端口号为 Zipkin Server 的默认端口号

spring:
  application:
    name: hello-spring-cloud-zipkin

server:
  port: 9411

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
      
management:
  metrics:
    web:
      server:
        auto-time-requests: false

追踪服务

在 所有需要被追踪的项目(就当前教程而言,除了 dependencies 项目外都需要被追踪,包括 Eureka Server) 中增加 spring-cloud-starter-zipkin 依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-zipkinartifactId>
dependency>

在这些项目的 application.yml 配置文件中增加 Zipkin Server 的地址即可

spring:
  zipkin:
    base-url: http://localhost:9411

测试追踪

启动全部项目,打开浏览器访问:http://localhost:9411/ 会出现以下界面:
Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第4张图片

刷新之前项目中的全部测试接口(刷多几次)

点击Find a trace,可以看到具体服务相互调用的数据

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第5张图片

点击 Dependencies,可以发现服务的依赖关系
Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第6张图片

至此就代表 ZipKin 配置成功

Spring Boot 监控管理系统 Admin

随着开发周期的推移,项目会不断变大,切分出的服务也会越来越多,这时一个个的微服务构成了错综复杂的系统。对于各个微服务系统的健康状态、会话数量、并发数、服务资源、延迟等度量信息的收集就成为了一个挑战。Spring Boot Admin 应运而生,它正式基于这些需求开发出的一套功能强大的监控管理系统。

Spring Boot Admin 有两个角色组成,一个是 Spring Boot Admin Server,一个是 Spring Boot Admin Client,本章节将带领大家实现 Spring Boot Admin 的搭建。

Spring Boot Admin 服务端

创建 Spring Boot Admin Server

创建一个工程名为 hello-spring-cloud-admin 的项目,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.0modelVersion>

    <parent>
        <groupId>com.funtlgroupId>
        <artifactId>hello-spring-cloud-dependenciesartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../hello-spring-cloud-dependencies/pom.xmlrelativePath>
    parent>

    <artifactId>hello-spring-cloud-adminartifactId>
    <packaging>jarpackaging>

    <name>hello-spring-cloud-adminname>
    <url>http://www.funtl.comurl>
    <inceptionYear>2018-NowinceptionYear>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webfluxartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>org.jolokiagroupId>
            <artifactId>jolokia-coreartifactId>
        dependency>
        <dependency>
            <groupId>de.codecentricgroupId>
            <artifactId>spring-boot-admin-starter-serverartifactId>
        dependency>
        

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zipkinartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
        
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <mainClass>com.funtl.hello.spring.cloud.admin.AdminApplicationmainClass>
                configuration>
            plugin>
        plugins>
    build>
project>

主要增加了 2 个依赖,org.jolokia:jolokia-core、de.codecentric:spring-boot-admin-starter-server

<dependency>
    <groupId>org.jolokiagroupId>
    <artifactId>jolokia-coreartifactId>
dependency>
<dependency>
    <groupId>de.codecentricgroupId>
    <artifactId>spring-boot-admin-starter-serverartifactId>
dependency>

其中 spring-boot-admin-starter-server 的版本号为:2.0.0,这里没写版本号是因为我已将版本号托管到 dependencies 项目中

Application

通过 @EnableAdminServer 注解开启 Admin 功能

package com.funtl.hello.spring.cloud.admin;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

application.yml

设置端口号为:8084

spring:
  application:
    name: hello-spring-cloud-admin
  zipkin:
    base-url: http://localhost:9411

server:
  port: 8084

management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        # 注意:此处在视频里是 include: ["health", "info"] 但已无效了,请修改
        include: health,info

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

主要增加了 Spring Boot Admin Server 的相关配置

management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        # 注意:此处在视频里是 include: ["health", "info"] 但已无效了,请修改
        include: health,info

测试访问监控中心

打开浏览器访问:http://localhost:8084 会出现以下界面

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第7张图片


Spring Boot Admin 客户端

创建 Spring Boot Admin Client

创建一个工程名为 hello-spring-cloud-admin-client 的项目,pom.xml 文件如下:
或者给已有服务加上client依赖和配置


<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.0modelVersion>

    <parent>
        <groupId>com.funtlgroupId>
        <artifactId>hello-spring-cloud-dependenciesartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../hello-spring-cloud-dependencies/pom.xmlrelativePath>
    parent>

    <artifactId>hello-spring-cloud-admin-clientartifactId>
    <packaging>jarpackaging>

    <name>hello-spring-cloud-admin-clientname>
    <url>http://www.funtl.comurl>
    <inceptionYear>2018-NowinceptionYear>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>org.jolokiagroupId>
            <artifactId>jolokia-coreartifactId>
        dependency>
        <dependency>
            <groupId>de.codecentricgroupId>
            <artifactId>spring-boot-admin-starter-clientartifactId>
        dependency>
        

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zipkinartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
        
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <mainClass>com.funtl.hello.spring.cloud.admin.client.AdminClientApplicationmainClass>
                configuration>
            plugin>
        plugins>
    build>
project>

主要增加了 2 个依赖,org.jolokia:jolokia-core、de.codecentric:spring-boot-admin-starter-client

 
 <dependency>
     <groupId>org.jolokiagroupId>
     <artifactId>jolokia-coreartifactId>
 dependency>
 <dependency>
     <groupId>de.codecentricgroupId>
     <artifactId>spring-boot-admin-starter-clientartifactId>
 dependency>

其中 spring-boot-admin-starter-client 的版本号为:2.0.0,这里没写版本号是因为我已将版本号托管到 dependencies 项目中

Application

程序入口类没有特别需要修改的地方

package com.funtl.hello.spring.cloud.admin.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class AdminClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminClientApplication.class, args);
    }
}

application.yml

设置端口号为:8085,并设置 Spring Boot Admin 的服务端地址

spring:
  application:
    name: hello-spring-cloud-admin-client
  boot:
    admin:
      client:
        url: http://localhost:8084
  zipkin:
    base-url: http://localhost:9411

server:
  port: 8085

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

主要增加了 Spring Boot Admin Client 相关配置

spring:
  boot:
    admin:
      client:
        url: http://localhost:8084

测试服务监控

依次启动两个应用,打开浏览器访问:http://localhost:8084 界面显示如下

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第8张图片

从图中可以看到,我们的 Admin Client 已经上线了,至此说明监控中心搭建成功

WallBoard

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第9张图片

Journal

Spring Cloud Netflix服务搭建详解(三):分布式配置中心和服务监控追踪_第10张图片

你可能感兴趣的:(SpringCloud,微服务)