Consul 初学笔记(Spring Cloud 集成)
1. 什么是 Consul?

Consul 是 HashiCorp 提供的分布式服务发现和配置管理系统,具备以下功能:
- 服务发现:支持多个服务注册和服务发现机制。
- 健康检查:自动检查服务的健康状态。
- Key/Value 存储:支持分布式的配置管理。
- 多数据中心支持:适合跨数据中心的分布式架构。
- 服务网格:可以和 Envoy 集成,支持服务网格管理。
2. 为什么使用 Consul 与 Spring Cloud 集成?
- 服务发现:Spring Cloud Consul 可以自动注册服务,并允许其他微服务通过 Consul 查找到它们。
- 分布式配置管理:利用 Consul 的 Key/Value 存储机制,Spring Cloud 可以动态地加载和更新配置。
- 健康检查:可以自动对注册的服务进行健康检查,确保服务稳定运行。
3. 环境准备
3.1 下载和安装 Consul
我们可以从 Consul 官方下载页面 获取适用于不同操作系统的 Consul 可执行文件。
-
安装后,执行
consul agent -dev启动 Consul 在开发模式下运行。
-
浏览器访问
http://localhost:8500,可以看到 Consul 的管理界面。
3.2 引入 Spring Cloud Consul 依赖
在 Spring Boot 项目中,添加以下依赖到 pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
3.3 在 bootstrap.yml 中配置 Consul
spring:
application:
name: cloud-provider-payment
cloud:
consul:
host: localhost # Consul 服务器地址
port: 8500 # Consul 服务器端口
discovery:
service-name: ${spring.application.name}
register: true # 将服务注册到 Consul
prefer-ip-address: true
4. 服务注册与发现
4.1 启动服务注册
-
启动 Consul:
consul agent -dev访问
http://localhost:8500,确保 Consul 正常运行。 -
启动 Spring Boot 应用,应用启动后会自动注册到 Consul 中,你可以在 Consul UI 界面查看到注册的服务。
4.2 服务发现
当其他服务需要调用 cloud-provider-payment 时,可以通过服务名进行调用,Spring Cloud LoadBalancer 会从 Consul 中拉取服务地址,进行负载均衡。
RestTemplate 负载均衡配置:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
在代码中使用:
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getPayment/{id}")
public String getPayment(@PathVariable("id") Long id) {
return restTemplate.getForObject("http://cloud-provider-payment/pay/get/" + id, String.class);
}
}

5. Consul 配置管理
除了服务发现,Consul 还可以用来管理分布式配置。通过 Spring Cloud Consul,服务可以自动从 Consul 的 K/V 存储中读取配置。
5.1 在 Consul 中添加配置
可以通过 Consul 的 UI 或者 CLI 来添加配置。例如,创建一个 Key config/cloud-provider-payment/data 并设置值。
5.2 在 bootstrap.yml 中启用 Consul 配置
spring:
cloud:
consul:
config:
enabled: true
default-context: application
format: yaml
5.3 读取 Consul 配置
在 Spring Boot 应用中,可以像读取普通配置一样读取 Consul 中的配置。
@Value("${config.info}")
private String configInfo;
6. 常用命令
启动 Consul
consul agent -dev
注册服务的健康检查
consul services register service.json
检查 Consul 状态
consul members
查看 Consul 的 Key/Value 配置
consul kv get config/cloud-provider-payment/data
7. 总结
Consul 作为分布式服务发现和配置管理工具,与 Spring Cloud 集成后,能够非常方便地实现微服务的注册、发现和健康检查。通过 Key/Value 存储,还能简化分布式配置的管理。对于微服务架构,Consul 提供了一个稳定且灵活的解决方案。
&spm=1001.2101.3001.5002&articleId=143136341&d=1&t=3&u=a99a6111cc354855a3ea754bea375ae4)
1999

被折叠的 条评论
为什么被折叠?



