第四章_Eureka服务注册与发现
1.Eureka基础知识
1.1Eureka工作流程-服务注册

1.2Eureka两大组件

2.单机Eureka构建步骤
-
IDEA生成EurekaServer端服务注册中心,类似于物业公司
-
EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provider,类似尚硅谷对外提供授课服务
-
EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer,类似来上课的各位同学
2.1IDEA生成EurekaServer端服务注册中心
(1)pom文件引入

(2)yml配置文件

(3)主启动

(4)测试
运行localhost:7001
2.2EurekaClient端cloud-provider-payment8081将注册进EurekaServer
(1)pom

(2)改yml和主启动


(3)测试
运行localhost:7001,观察到支付模块已经注册到Eureka服务注册中心

2.3EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer
(1)pom

(2)改yml和主启动

(3)测试

2.4工作流程

3.集群Eureka构建步骤
3.1Eureka集群原理说明
(1)问题引入


3.2EurekaServer集群环境构建步骤
(1)修改映射配置添加进hosts文件


(2)修改服务7001和7002的yml配置文件
- 7001

- 7002

(3)测试

3.3将支付8081和订单80服务发布到2台Eureka集群配置中------改yml

3.4测试01
启动顺序
- 启动EurekaServer,7001/7002服务
- 再启动服务提供者,8001
- 再启动消费者,80
测试之前的网站
3.5支付8001集群环境构建
(1)思路

(2)新建支付服务8002
并将支付服务8001代码复制粘贴到支付服务8002中,再修改相关yml中端口名称和主启动类名称即可
(3)修改支付服务8001/8002的Controller

(4)bug
①修改订单80服务远程调用的地址

②使用@LoadBalanced注解赋予RestTemplate负载均衡能力

(5)测试
-
先启动EurekaServer,即7001/7002服务
-
再启动服务提供者,即支付8001/8002服务、最后启动订单80服务
-
结果:8001/8002端口交替出现、负载均衡效果达到


4.Actuator微服务信息完善
- 涉及的jar包

4.1主机名称:服务名称修改
-
存在的问题:Eureka显示主机名称(不安全)
-
修改:
-
效果:
4.2访问信息需配置有IP显示


5.服务发现Discovery
服务发现:对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息
5.1服务发现步骤
(1)修改支付服务8001的controller
引入discoverClient,即服务发现客户端

(2)主启动添加注解@EnableDiscoveryClient

- 说明

6.Eureka自我保护
6.1概述

即:某时刻某一个微服务不可用了的时候,Eureka不会立刻清理,依旧会对微服务的信息进行保存
属于CAP里面的AP分支

6.2怎么禁止自我保护
(1)注册中心EurekaServer70001

- 效果

(2)生产者客户端EurekaClient端8001

效果:

- 关闭8001服务后

第五章_Zookeeper服务注册与发现
1.Zookeeper概述
Zookeeper是一个分布式协调工具,可以实现注册中心功能
关闭Linux服务器防火墙后启动zookeeper服务器
zookeeper服务器取代Eureka服务器,zk作为服务注册中心
2.Linux新增JDK1.8环境并安装Zookeeper服务
-
首先,在主机下载JDK1.8和Zookeeper相关jar包的压缩包
-
第二,通过Xftp5软件将jar包的压缩包传到Linux上(路径为/usr/local),再解压
-
第三,配置Java和zookeeper的环境变量(修改文件/etc/profile,新增以下内容)

-
第四,配置zookeeper服务注册中心的配置文件(进入zookeeper安装路径)
该文件新增以下内容:
-
第五,启动zookeeper并查看状态

4.主机连接zookeeper
(1)pom文件---注意删掉Eureka相关依赖,否则会报两个服务注册中心错误
xml
<dependencies>
<!-- 引入自己定义的api通用包,可以使用payment对象-->
<dependency>
<groupId>com.peng.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</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>
<!-- Springboot整合zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- 先排除自带的zookeeper3.5.3 ,否则会和linux安装的3.8.2版本产生冲突-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- linux安装的zookeeper3.8.2版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)application.yml

(3)主启动

(4)测试

- zookeeper发现注册到服务中心的服务
使用命令:./zkCli.sh 进入zookeeper客户端

-
通过service的id流水号查看注册进zookeeper的服务详细信息
5.注册进Zookeeper的节点为临时节点
主动停掉主机的java程序后,过段时间注册进zookeeper的服务消失

6.新建消费者模块---cloud-consumerzk-order-80
(1)pom
xml
<dependencies>
<!-- 引入自己定义的api通用包,可以使用payment对象-->
<dependency>
<groupId>com.peng.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</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>
<!-- Springboot整合zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- 先排除自带的zookeeper3.5.3 ,否则会和linux安装的3.8.2版本产生冲突-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- linux安装的zookeeper3.8.2版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)yml

(3)配置类---引入restTemplate

(4)主启动

(5)业务类(通过80端口调用8004端口服务)

(6)测试
-
测试一:cloud-consumer-order服务注册进zookeeper服务注册中心(成功)
-
测试二:通过80端口调用8004端口(失败)
第六章_Confsul
1.Consul简介
(1)Consul是什么

(2)Consul能做什么

(3)Consul中文文档
Spring Cloud Consul 中文文档 参考手册 中文版
2.安装并运行Consul
(1)下载地址
Install | Consul | HashiCorp Developer
选中window的amd64版本进行安装

(2)解压缩包,并打开cmd

-
验证consul是否安装成功
-
启动consul
-
输入localhost:8500,即可看到consul注册中心页面
3.服务提供者
新建module工程:cloud-providerconsul-payment8006
(1)pom文件
xml
<dependencies>
<!-- 引入自己定义的api通用包,可以使用payment对象-->
<dependency>
<groupId>com.peng.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>
<!-- springboot整合Web组件 -->
<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>
<!-- 日常通用jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)yml文件

(3)主启动

(4)业务类

(5)测试一

(6)测试二

4.服务消费者
(1)pom文件
xml
<dependencies>
<!-- 引入自己定义的api通用包,可以使用payment对象-->
<dependency>
<groupId>com.peng.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>
<!-- springboot整合Web组件 -->
<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>
<!-- 日常通用jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)yml文件

(3)主启动
(4)业务类

(5)测试一:成功

(6)测试二:失败

5.三个注册中心异同点

(1)CAP
- C:Consistency(强一致性)
- A:Availability(可用性)
- P:Partition(分区容错性)
CAP理论关注粒度是数据,而不是
(2)经典CAP图
- AP(Eureka)
- CP(Zookeeper/Consul)
(3)AP

(4)CP
