整体概念
Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
搭建
- 从官网下载Consul,
- 下载完成后使用开发模式启动exe文件
consul agent -dev
- 访问Consul 控制台 http://localhost:8500/
注册中心
- 新建项目 consumer-service
pom 文件
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>consumer-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consumer-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</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-consul-discovery</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件
server.port=8080
spring.application.name=consumer-service
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consumer-service
- 访问 http://localhost:8500/ 查看
配置中心
- pom 文件添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
- 配置文件
bootstrap.properties
server.port=8080
spring.application.name=consumer-service
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consumer-service
spring.cloud.consul.config.enabled=true
spring.cloud.consul.config.format=yaml
# 设置所在目录
spring.cloud.consul.config.prefix=config
# 设置分隔符
spring.cloud.consul.config.profile-separator=-
# 配置 key 的名字
spring.cloud.consul.config.data-key=data
application.properties
spring.profiles.active=dev
- 页面创建配置文件
key : config/consumer-service-dev/data,匹配规则
${prefix}
/${service-name}${profile-separator}${active}/${data-key}
value:
config:
info: version is 1
- 测试类
@RestController
@RefreshScope
public class ConsumerController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
- 访问 http://localhost:8080/getConfigInfo
可能出现的问题
- 双击 consul.exe 闪退
解决方案:cmd 进入 consul.exe 所在目录,执行 consul agent -dev - client 启动后无法在consul 页面看到服务
可能为版本兼容问题,改用 consul 1.6.1,和上述 pom 文件中的版本后正常
源码地址
https://gitee.com/liu-yuanxiong/consul-parent