Spring Cloud Consul(四)
Spring Cloud Consul
本章节的代码:https://github.com/wicksonZhang/Spring-Cloud
我们只需要聚焦在如下2个服务当中:
1. 基础概念
1.1. Consul 是什么?
Consul
用于服务发现、健康检查和动态配置的中间件。在 Spring Cloud 来实现服务注册与发现、配置管理、负载均衡等功能,从而构建和管理分布式系统。
1.2. Consul 优缺点
优点
- 服务发现与注册
- 健康检查
- 提供图形化界面
1.3. Consul 解决了什么问题
我们上面讲解的
Eureka
、Zookeeper
、Consul
本质上都是注册中心,解决的问题都是分布式场景中存在的问题。例如,服务注册与发现、健康检查、一致性等问题。
- Consul 解决了分布式系统中服务发现、健康检查、一致性、动态配置等方面的问题,有助于构建可靠、灵活和高效的分布式系统。
2. 安装 Consul
Consul
下载地址:Install | Consul | HashiCorp Developer本次下载的版本是1.6.1:https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_windows_amd64.zip
安装环境
- 操作系统:Win 11
- Consul 版本:Consul-1.6.1
安装步骤
- Step-1:下载安装包
- Step-2:解压安装包
- Step-3:执行 exe 文件
具体实现
3. 启动 Consul
启动命令
1
consul agent -dev
具体操作如下
访问
Consul
首页:http://localhost:8500
4. Consul 单机操作
实现需求
- 我们将上一章节的订单、支付微服务注册到
Consul
当中
- 我们将上一章节的订单、支付微服务注册到
实现思路
- Step-1:创建支付服务
04-spring-cloud-singleton-consul-payment-5000
- Step-2:创建订单服务
04-spring-cloud-singleton-consul-order-5100
- Step-1:创建支付服务
代码结构
4.1. 创建支付服务
创建支付服务:
05-spring-cloud-consul-payment-5000
实现步骤
- Step-1:导入
pom.xml
依赖 - Step-2:修改
application.properties
文件 - Step-3:创建主启动类
- Step-4:编写业务类
- Step-1:导入
Step-1:导入
pom.xml
依赖1
2
3
4
5
6
7
8
9
10
11
12
13
14<dependencies>
<!-- 导入公共依赖包 -->
<dependency>
<groupId>cn.wickson.cloud</groupId>
<artifactId>01-spring-cloud-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 导入 consul 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>Step-2:修改
application.properties
文件1
2
3
4
5
6
7
8# 端口
server.port=5000
# 服务别名
spring.application.name=spring-cloud-consul-payment-5000
# consul 注册节点
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}Step-3:创建主启动类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* 支付服务-微服务启用类
*
* @author ZhangZiHeng
* @date 2024-01-03
*/
public class SpringCloudConsulPayment {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsulPayment.class, args);
}
}Step-4:编写业务类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19/**
* 支付服务-控制类
*
* @author ZhangZiHeng
* @date 2024-01-03
*/
public class PaymentController {
private String serverPort;
public ResultUtil paymentConsul() {
return ResultUtil.success("Spring Cloud with consul port: " + serverPort + ", UUID:" + UUID.randomUUID().toString());
}
}
4.2. 创建订单服务
创建支付服务:
05-spring-cloud-consul-order-5100
实现步骤
- Step-1:导入
pom.xml
依赖 - Step-2:修改
application.properties
文件 - Step-3:创建主启动类
- Step-4:编写业务类
- Step-1:导入
其中 Step-1、Step-2、Step-3 与上面操作
创建支付服务
保持一致,只需要修改名称Step-4:编写业务类
OrderController.java
控制类,其中 PAYMENT_URL 需要修改为05-spring-cloud-consul-payment-5000
注册的服务名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28/**
* 订单服务-控制类
*
* @author ZhangZiHeng
* @date 2023-01-03
*/
public class OrderController {
public static final String PAYMENT_URL = "http://spring-cloud-consul-payment-5000";
private RestTemplate restTemplate;
/**
* 获取订单
*
* @return ResultUtil
*/
public ResultUtil getPayment() {
return restTemplate.getForObject(PAYMENT_URL + "/payment/consul" , ResultUtil.class);
}
}RestTemplateConfig.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
* RestTemplate 配置
*
* @author ZhangZiHeng
* @date 2023-01-03
*/
public class RestTemplateConfig {
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
5. 单元测试
5.1. 是否在 Consul
注册节点
5.2. 查看支付服务信息
5.3. 查看订单服务信息
5.4. 访问订单服务
访问订单服务时,我们可以看到对应的端口信息时 支付微服务的 5000
6. CAP 理论
我们已经整体的学习了三个注册中心:Eureka、Zookeeper、Consul。在微服务体系中他们主要的作用都是承担了服务发现与注册,服务的健康检查等等。我们从开发语言和CAP角度看一下这三个注册中心有什么不同。
- CAP 理论
- Consistency: 一致性,指系统的所有节点在同一时间看到的数据是一致的。
- Availability: 可用性,指系统在有请求时能够返回正确的响应,即系统保证服务可用,不会因节点故障而出现不可用的情况。
- Partition Tolerance: 分区容错性,指系统在遇到网络分区(节点之间通信失败,不能互相通信)的情况下仍然能够继续运行。
特性 | Eureka | Zookeeper | Consul |
---|---|---|---|
开发语言 | Java | Java | Go、但提供了 REST API 可以用于其他语言 |
CAP 特性 | 通常为 AP(可用性和分区容错性) | 通常为 CP(一致性和分区容错性) | 可以根据配置变为 CP 或 AP |
服务发现 | 可以作为服务注册与发现的中心组件,支持微服务架构。 | 提供服务发现功能,但需要更多自定义和额外开发。 | 提供了内置的服务注册与发现功能,易于集成和使用。 |
使用场景 | 适用于需要快速搭建和维护的微服务架构。 | 适用于需要强一致性的分布式系统,如分布式协调、配置管理等。 | 适用于需要灵活性并可以根据需求选择一致性或可用性的系统。 |
社区支持 | 相对活跃的社区支持,但可能不如其他选项成熟。 | 成熟且活跃的社区支持,被广泛应用于许多大规模系统中。 | 有不少用户和社区支持,但相对于 Zookeeper 可能规模较小。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wickson Blog!
评论