SpringCloud.H-注册中心
# SpringCloud.H-注册中心
笔记日期:2020.5.20
eureka停更.....
使用:
- Zookeeper
- consul
- Nacos(阿里)
# 1. zookeeper
# 1. 概述
zookeeper是一个分布式协调工具,可以实现注册中心功能
https://blog.csdn.net/qq_41211642/article/details/104821619
# 2. 入门
# 1.依赖
<!--springboot整合zookeeper客户端-->
<!--替代eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
2
3
4
5
6
# 2.配置
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
# zookeeper配置
zookeeper:
connect-string: 116.196.118.167:2181
2
3
4
5
6
7
8
# 3.代码
@EnableDiscoveryClient
/**
* @Author: CHGGX
* @Date: 2020/03/30 14:25
* @Description: <h1> Zookeeper作为服务器 </h1>
* @EnableDiscoveryClient // 该注解用户想使用consul或者zookeeper作为注册中心是服务注册
*/
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
测试
@Slf4j
@RestController
@RequestMapping(value = "payment")
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/zk")
public String paymentZk() {
return "SpringCloud with Zookeeper: " + serverPort + "\t" + UUID.randomUUID().toString();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3. jar包冲突
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--先排除自带的zookeeper3.5.3-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.5.6版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.6</version>
</dependency>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PS: 新版本的zookeeper还会遇到slf4j和log4j包冲突的问题,此时在zookeeper去掉slf4j的依赖
# 4. zookeeper作为服务注册中心,微服务作为节点注册进来,那这个节点是临时还是持久?
关于Eureka我们知道,偶尔有一时刻服务提供者出了点故障,Eureka会开启自我保护机制,微服务不会被删除,那现在关闭8004试一下zookeeper中的服务会有什么变化吗
- 可以看出,Zookeeper也是在一定时间内,不会剔除服务,超时才剔除,所以zookeeper具备的服务节点是临时的。当你再启动8004时,zookeeper还会自动监听服务状态,但是流水号是一个新的流水号。
# 2. consul
官网: https://www.consul.io/
https://blog.csdn.net/qq_41211642/article/details/104828632
# 1. 概述
consul 是一台开源的分布式服务发现和配置管理系统,有HashiCorp公司用
GO
语言开发
提供了微服务系统中的服务之类,配置中心,控制总线....
- 可视化界面
spring:
application:
name: consul-provider-peyment
###consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
2
3
4
5
6
7
8
9
10
11
依赖
<!--springcloud consul-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
2
3
4
5
# 2. consul安装
# 1.下载
官网下载地址: https://www.consul.io/downloads.html
官网下载太慢,我找了一个百度云地址,提取码:247m https://pan.baidu.com/s/1nMXRms3_ZPhgqawrcEcsdA
# 2. 安装
下载完成后解压,根据自己实际情况选择路径
- 解压完成后,在解压路径下的地址栏输入“cmd”,打开命令行窗口。并键入“consul”,若出现一连串英文则表示安装成功,见图二。
启动:
- 命令consul agent -dev启动,看到Consul agent running! 启动成功
通过以下地址可以访问 Consul 首页
http://localhost:8500
# 3. eureka, consul, zookeeper异同点
# 1. 异同点
组件名 | 语言 | CAP | 服务健康可查 | 对外暴露接口 | SpringCloud集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | Go | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
PS: C: 强一致性,A: 可用性,P: 分区容错性
# 2. CAP核心理论
最多只能同时较好的满足两个
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求。因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类。
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强 CP - 满足一致性,分区容错性的系统,通常性能不是特别高 AP - 满足可用性,分区容错性的系统,通常可能对一致性要求低一些
# 1. eureka
- Eureka 采用的是AP架构,只满足可用性和分区容错性.
- 当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
- Eureka有自我保护机制,更强调的是AP,保证服务的高可用,微服务就是偶尔宕机掉线了,一时半会不会立刻删除。
# 2. zookeeper/consul
- Zookeeper 和 Consul采用的是CP架构,满足一致性和分区容错性
- 当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性。
PS: Zookeeper、Consul注册的微服务是一个临时节点,只要微服务不可用,发心跳测试收不到了,就迅速剔除微服务,微服务恢复过来以后,会重新换一个serviceID。