什么是 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.YAML
- 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.YAML
- # 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.YAML
- 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/p/9857996.html