什么是Consul
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
Consul安装
访问官网https://www.consul.io/downloads
根据操作系统类型选择下载的版本,下载后解压,是一个可执行的exe文件
下载完后需要配置环境变量
配完后打开cml 执行
consul agent -dev 启动服务
-dev表示开发模式 -server表示服务模式
启动如下为成功
在浏览器访问http://localhost:8500/可以看到服务管理界面
这样说明注册服务中心可以正常提供服务了。
项目改造
改造mango-monitor工程,作为服务注册中心。
添加依赖
在mango-monitor工程的pom文件中添加Spring Cloud 和 Consul注册中心依赖
<!--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>Greenwich.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
修改配置YML文件
修改mango-monitor的application.yml文件
server:
port: 8000
spring:
application:
name: mango-monitor
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: ${spring.application.name} # 注册到consul的服务名称
# 开放健康检查接口
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
修改启动类
在启动类上添加@EnableDiscoveryClient注解,开启服务发现支持。
@EnableDiscoveryClient
@EnableAdminServer
@SpringBootApplication
public class MangoMonitorApplication {
public static void main(String[] args) {
SpringApplication.run(MangoMonitorApplication.class, args);
}
}
我们已经修改完成,接下来启动mango-monitor访问http://localhost:8500/查看
可以看到我们的服务已经成功注册到注册中心
然后我们将mango-backup和mango-admin都改造一下,作为服务注册到注册中心
步骤和改造mango-monitor项目一样,先添加pom依赖,再修改yml文件,最后在启动类添加@EnableDiscoveryClient注解
然后启动各个项目,再访问http://localhost:8500/查看
可以看到admin、backup也已经注册到服务中心了
这里说明一下spring boot 和 spring cloud 版本对应好,要不会有意想不到的问题
我的backup和monitor 项目spring boot 版本是
<version>2.1.1.RELEASE</version>
对应的
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR3</version>
当我把上面的配置信息配置到admin中,启动项目报错提示我找不到MangoMonitorApplication类
原因就是我admin的spring boot版本是2.4.4和spring-cloud-dependencies没对应上
所以我把admin项目pom中的spring-cloud-dependencies版本修改为
<version>2020.0.0</version>
然后启动就正常了