前言
1、Eureka工作原理
Spring Cloud框架下的服务发现Eureka包含两个组件,分别是:Eureka Server与Eureka Client。
Eureka Server:
Eureka Server,也称为服务注册中心。各个服务启动后,会在Eureka Server中进行注册,这样Eureka Server的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client:
Eureka Client也称为服务(服务实例)。作为一个Java客户端,用于简化与Eureka Server的交互。Eureka Client内置一个使用轮询负载算法的负载均衡器。服务启动后,Eureka Client将会向Eureka Server发送心跳更新服务,如果Eureka Server在多个心跳周期内没有接收到某个服务的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Client注册在Eureka Server,Eureka Client中的服务Service是通过REST调用的。Eureka Client还具有缓存功能,它能够从Eureka Server查询当前注册的服务信息并缓存到本地,这样即使Eureka Server宕机,Eureka Client依然可以利用缓存中的信息调用服务.
2、服务提供者与服务消费者
Eureka Client存在两种角色,分别是服务提供者和服务消费者。
服务提供者:
服务提供者( Eureka Client )启动后,会通过REST请求将自己注册在Eureka Server,并维护一个心跳(默认30秒发送一次心跳)进行服务续约,告诉Eureka Server“我还活着”,防止Eureka Server将该服务从服务列表剔除。
服务消费者:
用于获取Eureka Server注册的服务清单,并且该服务清单默认每隔30秒更新一次。服务消费者获取到服务清单后,能够根据自己的需求决定调用哪个服务,默认采用轮询方式调用,从而实现Eureka Client的负载均衡。
服务消费者是如何调用服务提供者的?
服务提供者和服务消费者都属于Eureka Client,它们都会将自己的信息通过REST API形式提交给Eureka Server。服务消费者注册后,还会获取一份服务注册列表,该列表包含了所有向Eureka Server注册的服务信息。获取到服务注册信息后,服务消费者就会根据服务提供者的IP地址,通过HTTP远程调用服务提供者的服务。
一、注册中心实验
1.新建第一中心模块
在父级目录下新建一个模块,模块命名为lesson2-eureka-server
2.修改pom.xml
打开新建模块的pom.xml,注意是新建!!!
在pom文件中添加的Eureka Server依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3.添加资源文件
在resources文件夹下添加application.yml
application.yml配置文件内容如下,请注意缩进!!!
4.创建启动类
新建一个EurekaServer包
在包下面创建启动类EurekaServerApplication
在EurekaServerApplication.java文件中写上如下代码
(在项目启动类EurekaServerApplication上添加
@EnableEurekaServer注解开启Eureka Server功 能。)
5.启动
点击三角形运行
打开浏览器,输入127.0.0.1:7000,出现以下说明成功启动了eurekaserver
二、服务提供者实验
1.新建提供者模块
在父级目录下新建一个模块,模块命名为lesson02-eureka-provider。
2.修改pom.xml
在pom文件中添加Eureka Client、Web依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
</dependencies>
3.添加资源文件
在resourses文件夹下创建application.yml配置文件。
在配置文件中填写如下配置,注意缩进!!!
4.创建启动类
在java文件夹下创建一个EurekaProvider包
在EurekaProvider包内创建EurekaProviderApplication启动类。
在EurekaProviderApplication.java下填写代码:
(在项目启动类EurekaProviderApplication上添加
@EnableEurekaClient注解开启Eureka Client功能。)
5.启动
确保实验一中的EurekaServerApplication在运行。
启动本次实验的服务
在浏览器上输入http://127.0.0.1:7000/,出现以下界面表示注册成功。
三、服务消费者实验
1.新建消费者模块
在父级目录下新建一个模块,模块命名为lesson02-eureka-consumer。
2.修改pom.xml
在pom文件中添加的Eureka Client、Web依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
</dependencies>
3.添加资源文件
在resourses文件夹下创建application.yml配置文件。
在配置文件中填写如下配置,注意缩进!!!
4.创建启动类
在java文件夹下创建一个EurekaConsumer包
在EurekaConsumer包内创建EurekaConsumerApplication启动类。
在EurekaConsumerApplication.java下填写代码:
5.启动
确保实验一、二中的EurekaServerApplication和EurekaProviderApplication在运行。
启动本次实验的服务
.在浏览器上输入http://127.0.0.1:7000/,出现以下界面表示注册成功。
四、注册中心集群实验
1. 修改hosts文件
因为是在单台电脑上建立集群,所以需要修改hosts文件将单台电脑模拟成两台机器。
打开C:\Windows\System32\drivers\etc\hosts,文件,在末尾添加如下内容:
注意:有些电脑这个地方不允许修改,则可以将该文件拷贝到桌面,在桌面改完后在拷贝回来进行覆盖。
2. 新建第二中心模块
在父级目录下再创建一个注册中心lesson02-eureka-server-another模块
1).修改pom.xml
第二注册中心依赖
在pom文件中添加的Eureka Server依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2).添加资源文件
在resources文件夹下添加application.yml,并添加如下配置,注意缩进!
3).创建启动类
新建一个EurekaServerAnother包
创建一个EurekaServerAnotherApplication启动类
在EurekaServerAnotherApplication.java下添加代码:
3. 修改第一注册中心配置
将实验一 eureka-server的application.yml进行修改:
4. 新建一个服务提供者
在父级目录下在创建一个服务提供者lesson02-eureka-provider-another
1).修改pom.xml
添加pom依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
</dependencies>
2).添加资源文件
在resources文件夹下添加application.yml,并添加如下配置,注意缩进!
3).创建启动类
新建一个EurekaProviderAnother包
新建一个EurekaProviderAnotherApplication启动类:
在EurekaProviderAnotherApplication.java中写上代码;
5.修改eureka-consumer
修改eureka-consumer中的application.yml,修改如下:
6.运行整个集群
依次运行eureka-server、eureka-server-another、eureka-provider、eureka-provider-another、eureka-consumer 全部运行成功后打开浏览器,打开两个页面,分别在地址栏输入: http://127.0.0.1:7000/ 和 http://127.0.0.1:7009/两个页面都显示如下所示算成功:
第二注册中心:
第一注册中心:
五、总结
1.eureka默认使用8673端口(此端口没有应用),所以会一直请求出现超时,因此要写service-url.defaultZone路径进行覆盖。
2.intance:hostname:localhost一定要记得写。
3.基本步骤都有:
创建模块->pom里添加依赖->main里resouce写配置文件->main里java创建包写启动类
4.当有多个注册中心时,例有注册中心1、2、3,
在中心1的service-url.defaultZone要写上中心2,3的路径,
在中心2的service-url.defaultZone要写上中心1,3的路径,
在中心3的service-url.defaultZone要写上中心1,2的路径,
此时注册中心中的服务列表共通。