• Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):注册中心(Spring Cloud Consul)


    什么是 Consul

    Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

    Consul 安装

    访问 Consul 官网 ,根据操作系统类型,选择下载 Consul 的最新版本。我这里选择windows版本。

    下载下来是一个zip压缩包,解压之后,是一个exe可执行文件。

     打开CMD终端,进入consul.exe所在目录,执行如下命令启动Consul服务。

    cd C:consul_1.3.0_windows_amd64  # 进入consul.exe所在目录
    consul agent -dev # 启动服务, -dev 表示开发模式运行,另外还有 -server 表示服务模式运行

    启动过程信息如下图所示。

    启动成功之后,访问 http://localhost:8500 , 可以查看 Consul 管理界面。

    kitty-monitor改造

    改造 kitty-monitor 工程,作为服务注册到注册中心。

    添加依赖

    添加Spring Cloud依赖文件,Consul注册中心依赖。

    pom.xml

    <!--consul-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <!--srping cloud-->
    <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>

    配置文件

    修改配置文件,添加服务注册配置。

    application.yml

    server:
      port: 8000
    spring:
      application:
        name: kitty-monitor
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            serviceName: ${spring.application.name}    # 注册到consul的服务名称

    启动类

    修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

    KittyMonitorApplication.java

    package com.louis.kitty.monitor;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    
    /**
     * 启动器
     * @author Louis
     * @date Oct 29, 2018
     */
    @EnableAdminServer
    @EnableDiscoveryClient
    @SpringBootApplication
    public class KittyMonitorApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(KittyMonitorApplication.class, args);
        }
    }

    测试效果

    启动服务监控服务器,访问 http://localhost:8500,发现服务已经成功注册到注册中心。

    访问 http://localhost:8000,查看服务监控管理界面,看到如下界面就没问题了。

    kitty-backup改造

    改造 kitty-backup工程,作为服务注册到注册中心。

    添加依赖

    添加Spring Cloud依赖文件,Consul注册中心依赖。

    pom.xml

    <!--consul-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <!--srping cloud-->
    <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>

    配置文件

    修改配置文件,添加服务注册配置,健康检查接口开放配置。

    application.yml

    # tomcat
    server:
      port: 8002
    # spring boot admin
    spring:
      application:
        name: kitty-backup
      boot:
        admin:
          client:
            url: "http://localhost:8000"
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            serviceName: ${spring.application.name}    # 注册到consul的服务名称
    # 开放健康检查接口
    management:
      endpoints:
        web:
          exposure:
            include: "*"
      endpoint:
        health:
          show-details: ALWAYS
    # backup datasource
    kitty:
      backup:
        datasource:
          host: localhost
          userName: root
          password: 123456
          database: kitty

    启动类

    修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

    KittyBackupApplication.java

    package com.louis.kitty.backup;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * 启动器
     * @author Louis
     * @date Oct 29, 2018
     */
    @EnableDiscoveryClient
    @SpringBootApplication(scanBasePackages={"com.louis.kitty"})
    public class KittyBackupApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(KittyBackupApplication.class, args);
        }
    }

    测试效果

    启动服务监控服务器,访问 http://localhost:8500,发现服务已经成功注册到注册中心。

    访问 http://localhost:8000,查看服务监控管理界面,发现服务已经在监控列表里了。

    点击服务,进入详情页面,可以看到服务相关的各种指标信息,比如进程、线程、内存使用、垃圾回收等等。

    kitty-admin改造

    同理,改造 kitty-admin工程,作为服务注册到注册中心。

    添加依赖

    添加Spring Cloud依赖文件,Consul注册中心依赖。

    pom.xml

    <!--consul-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <!--srping cloud-->
    <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>

    配置文件

    修改配置文件,添加服务注册配置,健康检查接口开放配置。

    application.yml

    server:
      tomcat:
        uri-encoding: UTF-8
        max-threads: 1000
        min-spare-threads: 30
      port: 8001
        #context-path: /kitty-admin
    # DataSource
    spring:
      datasource:
        name: druidDataSource
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/kitty?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
          username: root
          password: 123456
          filters: stat,wall,log4j,config
          max-active: 100
          initial-size: 1
          max-wait: 60000
          min-idle: 1
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 300000
          validation-query: select 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          pool-prepared-statements: true
          max-open-prepared-statements: 50
          max-pool-prepared-statement-per-connection-size: 20
      # spring boot admin
      application:
        name: kitty-admin
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            serviceName: ${spring.application.name}    # 注册到consul的服务名称
      boot:
        admin:
          client:
            url: "http://localhost:8000"
    # 开放健康检查接口
    management:
      endpoints:
        web:
          exposure:
            include: "*"
      endpoint:
        health:
          show-details: ALWAYS
    # pagehelper   
    pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql

    启动类

    修改启动类,添加 @EnableDiscoveryClient 注解,开启服务发现支持。

    KittyAdminApplication.java

    package com.louis.kitty.admin;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
     * 启动器
     * @author Louis
     * @date Oct 29, 2018
     */
    @EnableDiscoveryClient
    @SpringBootApplication(scanBasePackages={"com.louis.kitty"})
    public class KittyAdminApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(KittyAdminApplication.class, args);
        }
    }

    测试效果

    启动服务监控服务器,访问 http://localhost:8500,发现服务已经成功注册到注册中心。

    访问 http://localhost:8000,查看服务监控管理界面,发现服务已经在监控列表里了。

     

    但是点击进入详情页,发现并没有展示上面备份服务一样的信息,而是显示“invalid token”信息。

    那是监控服务器到客户端获取健康信息失败了,因为获取信息的接口被我们的Shiro给拦截了。

    修改Shiro配置,使监控信息获取接口无需进行登录认证,添加如下图所示内容。

    ShiroConfig.java

    修改完成之后,重启服务,在此查看详情页面,终于成功获取到监控信息了。 

    源码下载

    后端:https://gitee.com/liuge1988/kitty

    前端:https://gitee.com/liuge1988/kitty-ui.git


    作者:朝雨忆轻尘
    出处:https://www.cnblogs.com/xifengxiaoma/ 
    版权所有,欢迎转载,转载请注明原文作者及出处。

  • 相关阅读:
    NETCore EF 数据库连接正确nuget和MySql错误异常
    JS 对象属性名排序
    NET 在一个数组中查找另一个数组所在起始位置(下标从0开始,未找到返回-1)
    NET 判断是否为回文
    NET/Regex 处理连续空格
    NET 已知excel表格前面26个是a到z,27是aa28是ab,以此类推,N是多少
    Regex 首字母转大写/小写,全大写,全小写
    .NETCore下访问img、js等静态资源404解决办法
    WPF-后台代码使用Behavior
    Socket-服务器端与客户端互相通信
  • 原文地址:https://www.cnblogs.com/xifengxiaoma/p/9857996.html
Copyright © 2020-2023  润新知