springcloud学习笔记
Consul简介
- Consul是一套开源的分布式服务发现和配置管理系统,由go语言开发
- 提供了微服务系统中服务治理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案
- 基于raft协议
Consul可以干什么呢
- 服务发现:提供HTTP和DNS两种发现方式
- 健康监测:支持多种方式:Http、Tcp、Docker、Shell脚本定制化
- KV存储:key、value的存储方式
- 多数据中心:Consul支持多种数据中心
- 可视化Web界面
安装并运行Consul
在consul的官网下载最新的Windows版本.
下载解压后是一个consul.exe文件
然后通过cmd打开到consul.exe目录下面,然后执行命令:
consul agent -dev
,然后通过浏览器访问:http://localhost:8500/
我们观察到命令行中:
服务提供者
- 新建Module支付服务cloud-providerconsul-payment8006
- 修改pom文件
<dependencies>
<!-- 引入自定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.george.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--springcloud consul-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- 修改application.yml文件
### consul 服务端口号
server:
port: 8006
spring:
application:
name: consul-provider-payment
### consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: consul-provider-payment
#hostname:127.0.0.1
- 写主启动类
和前面代码类似 - 写业务类逻辑
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/consul")
public String paymentConsul(){
return "springcloud with consul"+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
- 验证测试
重新访问:http://localhost:8500/
,发现consul中含有consul-provider-payment微服务
服务消费者
- 新建消费者cloud-consumerconsul-order80
- 修改pom文件
和前面配置相同 - 修改application.yml文件
# 88服务微服务消费者端口
server:
port: 88
# 服务别名---zookeeper注册中心名称
spring:
application:
name: cloud-consumer-order
cloud:
zookeeper:
connect-string: 192.168.183.128:2181
- 写主启动类
和前面配置相同 - 配置bean
和前面配置相同,还是通过RestTemplate来调用服务 - 写业务逻辑类
@RestController
@Slf4j
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
public static final String INVOKE_URL="http://consul-provider-payment";
@GetMapping(value = "/consumer/payment/consul")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class);
return result;
}
}
-
验证测试
重新刷新http://localhost:8500/
-
访问地址测试
服务提供模块:支付模块
服务调用模块:消费模块
三个注册中心异同点
组件名 | 语言 | CAP | 服务健康检查 | 对外暴露接口 | SpringCloud集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | go | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
C:Consistencey(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错率)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求
CA-单点集群,满足一致性,可用性系统,通常在可扩展性上不太强大
CP-满足一致性,分区容忍的系统,通常性能不是特别高
AP-满足可用性,分区容忍性的系统,通常可能对一致性要求低一些
Eureka为AP:强调高可用性
Zookeeper和Consul为CP:强调数据一致性(Zookeeper临时节点)