手机版企业网站php,百度搜索的优势,wordpress单击右键提示,网站开发与推广方向目录#xff1a; Eureka 的 工作机制 :一、Eureka 的 工作原理 ( 两大组件 ) :1.1 Eureka Server ( 服务注册中心 )1.2 Eureka Client ( 服务/服务实例#xff0c;其存在 两种角色 : ①服务提供者 ②服务消费者 ) :Eureka Client 的 含义… 目录 Eureka 的 工作机制 :一、Eureka 的 工作原理 ( 两大组件 ) :1.1 Eureka Server ( 服务注册中心 )1.2 Eureka Client ( 服务/服务实例其存在 两种角色 : ①服务提供者 ②服务消费者 ) :Eureka Client 的 含义服务提供者服务消费者Eureka Server 与 服务提供者、服务消费者之间的关系 二、 第一个 Eureka应用 :2.1 搭建 Eureka Server① 创建 Eureka Server 项目② 全局配置文件( .yml文件 )中添加 Eureka ( 服务注册中心 ) 的相关配置信息③ 在项目启动类 上添加 EnableEurekaServer 注解④ 启动 项目启动类 的main( )方法 2.2 搭建 Eureka Client 作为 服务提供者⑤ 创建 Eureka Client 项目 ( 作为 服务提供者 )⑥ 全局配置文件( .yml文件 )中添加 Eureka ( 服务提供者 )的相关配置信息⑦ 在项目启动类 上添加 EnableEurekaClient 注解⑧ 运行 程序启动类 2.3 搭建 Eureka Client 作为 服务消费者⑨ 创建 Eureka Client 项目 ( 作为 服务消费者 )⑩ 全局配置文件( .yml文件 )中添加 Eureka ( 服务消费者 ) 的相关配置信息⑪ 在项目启动类 上添加 EnableEurekaClient 注解⑫ 运行 程序启动类小提示 三、搭建 Eureka 高可用集群 :1. 更改系统 hosts文件 配置① 更改系统 hosts文件 配置 2. 改造Eureka Server ( 服务注册中心 )② 再建一个 Eureka Server项目③ 修改 eureka-server 项目 ( 第一个服务注册中心 ) 中的全局配置文件④ 修改 eureka-server-another 项目 ( 第二个服务注册中心 ) 中的全局配置文件⑤ 在项目启动类 上添加 EnableEurekaServer 注解 3. 改造 服务提供者⑥ 再创建一个 Eureka Client 项目 ( 作为 服务提供者 )⑦ 全局配置文件( .yml文件 )中添加 Eureka ( 服务提供者 )的相关配置信息⑧ 在项目启动类 上添加 EnableEurekaClient 注解 4. 改造 服务消费者5. 启用Eureka 高可用集群 四、Eureka 的 常用配置4.1 心跳机制4.2 自我保护机制4.3 其他配置 :服务注册 相关的 配置信息服务实例 相关的 配置信息 作者简介 一只大皮卡丘计算机专业学生正在努力学习、努力敲代码中! 让我们一起继续努力学习 该文章参考学习教材为 《Spring Cloud微服务架构开发》 黑马程序员 / 编著 文章以课本知识点 代码为主线结合自己看书学习过程中的理解和感悟 最终成就了该文章 文章用于本人学习使用 同时希望能帮助大家。 欢迎大家点赞 收藏⭐ 关注哦 侵权可联系我进行删除如果雷同纯属巧合 服务的注册 发现对于 微服务架构来说是一个非常重要的环节。在 单一架构应用中业务逻辑层 ( Business Logic LayerBLL )中的 接口之间的 互相调用是通过一个固定的 Host 和 Port “发起” REST 或者 “RPC调用”。但是在微服务架构中每个服务是 “动态变化” 的难以通过 静态配置 的方式维护服务以至于后来产生了大量的 服务发现框架来完成 服务的自动化管理。 Eureka 的 “工作机制” :
一、Eureka 的 “工作原理” ( 两大组件 ) : 服务 的 “注册与发现框架” : Eureka框架 该框架包含 两个组件分别是 : (1) Eureka Server (2) Eureka Client。 1.1 Eureka Server ( 服务注册中心 ) Eureka Server : 服务注册服务器 / 服务注册中心。各个服务启动后会在 Eureka Server (服务注册中心) 中进行 注册这样Eureka Server 的 服务注册表中将会存储 所有 可用服务节点 的信息。服务节点的信息可以在界面中直观地看到。 -----( 简而言之 : 各个服务启动后会在服务注册中心中进行注册注册的信息将存储在 服务注册表中这些服务节点信息可在界面中直观地看到 ) 1.2 Eureka Client ( 服务/服务实例其存在 “两种角色” : ①服务提供者 ②服务消费者 ) :
Eureka Client 的 含义 Eureka Client : 也称为 服务 ( 服务实例 )作为一个 Java客户端用于 “简化” 与 Eureka Server 的 交互。 Eureka Client内置一个 使用轮询负载算法的 负载均衡器。服务启动后Eureka Client ( 服务实例 ) 将 会向 Eureka Server 发送 心跳更新服务如果 Eureka Server 在 多个心跳周期内( 默认90s内 )没有接收到某个服务的心跳Eureka Server ( 服务注册中心 )就将会从 服务注册表中把这个服务节点移除。为了更好地讲解 Eureka 组件的工作原理具体描述为下图所示 : 在上图中Eureka Client ( 服务 / 服务实例) 注册在 Eureka Server ( 服务注册中心 )Eureka Client 中的 服务是通过 REST 调用的。除此之外Eureka Client还具有缓存功能Eureka Client ( 服务 / 服务实例 ) 能够从 Eureka Server ( 服务注册中心 ) 查询当前注册 的 服务信息并 缓存到本地这样即使Eureka Server宕机Eureka Client 也依然可以 利用缓存 中的 信息调用服务。 EurekaClient ( 服务 / 服务实例 )存在 两种角色分别是 ① 服务提供者 和 ② 服务消费者。 服务提供者 EurekaClient ( 服务 / 服务实例 ) 启动后服务提供者会通过REST请求将自己注册在 Eureka Server ( 服务注册服务器 ) 中 并维护一个心跳 (默认30 秒发送一次心跳 ) 进行服务续约告诉 EurekaServer “我还活着”防止 Eureka Server 将 该服务 从服 务列表 中 剔除。 服务消费者 用于获取 Eureka Server ( 服务注册中心 ) 注册的 “服务清单”并且 该 “服务清单” 默认 每隔 30 秒更新一次 。服务消费者 获取到 服务清单后能够根据自己的需求决定调用哪个服务默认采用轮询方式调用从而实现Eurekaclient的负载均衡。 Eureka Server 与 服务提供者、服务消费者之间的关系 Eureka Server 与 服务提供者、服务消费者之间的关系 如下图所示 : 在上图中服务提供者和 服务消费者 都属于 Eureka Client它们都会将自己的信息通过REST API 的形式 提交给EurekaServer。 服务消费者 “注册后”还会获取一份 服务注册列表该列表包含了所有向 Eureka Server ( 服务注册中心 ) 注册的 服务信息。获取到服务注册信息后服务消费者就会根据服务提供者的 IP 地址通过 HTTP 远程调用服务提供者的服务。 需要注意的是服务提供者和服务消费者是可以相互转换的因为一个服务既可能是服务消费者同时又可能是服务提供者。例如在传统的企业应用三层架构中服务层会调用数据访问层的接口进行数据操作它本身也会提供服务给控制层使用。 二、 第一个 Eureka应用 : 介绍了 Eureka的 工作机制 后下面我们通过开发第一个Eureka应用加深对 服务注册与发现框架 : Eureka框架 的理解。建议是 先建一个空工程在这个工程中创建下面的项目。 2.1 搭建 “Eureka Server” 通过上面的学习大家应该知道了 Eureka Server 是一个 服务注册与发现中心 / 服务注册中心。有了它我们才可以 注册Eureka Client ( 服务 / 服务实例 )。接下来我们 先搭建 Eureka Server具体步骤如下 ① 创建 Eureka Server 项目 使用 Spring Initializr方式创建一个名称为 eureka-server 的 Spring Boot项目这里将Group命名为 com.myh将 Artifact 命名为eureka-server添加Eureka Server 依赖。 项目创建好后的 pom.xml文件代码 如下所示 : pom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- SpringBoot的版本为:2.1.7.RELEASE --version2.1.7.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdeureka-server/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-server/namedescriptioneureka-server/descriptionpropertiesjava.version1.8/java.version!-- Springcloud的版本为:Greenwich.SR2 --spring-cloud.versionGreenwich.SR2/spring-cloud.version/propertiesdependencies!-- 引入了 eureka-server的jar包 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project② 全局配置文件( .yml文件 )中添加 “Eureka” ( 服务注册中心 ) 的相关配置信息 在全局配置文件application.yml中添加Eureka的相关配置信息 ( 项目自动生成的配置文件为 application.properties我们可直接将后缀名改掉就行这两个文件格式都可以只是内部的内容格式不同。) application.yml : server:port: 7000 #服务端口号为: 7000 / 指定 服务注册中心的端口号为:7000spring:application:name: eureka-server #端口号名称配置 / 指定服务注册中心的名称eureka:client: register-with-eureka: false #表示不将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true)fetch-registry: false #表示 不从 EurekaSever 中获取 注册信息 (默认值为true)#(因为这里搭建的是Eureka Server无须注册服务也无须获取注册信息,所以 register-with-eureka 和 fetch-registry 的值都设置为false,其默认值为true )service-url:defaultZone: #设置服务注册中心地址http://${eureka.instance.hostname}:${server.port}/eureka/instance:hostname: localhost #主机名在上面的配置信息中server.port 指定了服务器端口号 7000。Spring.application.name 指定了当前 服务名称是 eureka-server。 Eureka.client.register-with-eureka用于设置是否向 Eureka Server “注册”默认值是 true。 Eureka.client.fetch-registry表示是否从Eureka Server “获取注册信息”由于这里搭建的是Eureka Server无须注册服务也无须获取注册信息因此这里将fetch-registry 和 register-with-eureka的值 都设置为false。Eureka.client.service-url.defaultZone 用于设置 “服务注册中心地址”。 ③ 在项目启动类 上添加 EnableEurekaServer 注解 在 项目启动类 上 添加 EnableEurekaServer 注解 启动 Eureka Server功能 EurekaServerApplication.java (项目启动类) : import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;SpringBootApplication
EnableEurekaServer // 启动Eureka Server
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}}④ 启动 项目启动类 的main( )方法 启动 项目启动类的 main( )方法。启动成功后在浏览器中访问 http://localhost:7000/ 网址 来查看 Eureka Server 的 主界面 , 效果如下图 : 2.2 搭建 “Eureka Client” 作为 “服务提供者” 下面我们来搭建一个 EurekaClient 作为 服务提供者并将其注册在上面搭建的 Eureka Server ( 服务注册中心 ) 中具体步骤如下 ⑤ 创建 Eureka Client 项目 ( 作为 “服务提供者” ) 使用 Spring Initializr方式创建一个名称为 eureka-provider ( 服务提供者 )的 Spring Boot项目。这里将 Group 命名为 com.myh , 将 Artifact命名为 eureka-provider , 添加 Web、 Eureka Client 依赖。 项目创建好后的 pom.xml文件 代码如下所示 : pom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- SpringBoot的版本为:2.1.7.RELEASE --version2.1.7.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdeureka-provider/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-provider/namedescriptioneureka-provider/descriptionpropertiesjava.version1.8/java.version!-- Springcloud的版本为:Greenwich.SR2 --spring-cloud.versionGreenWich.SR2/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 引入了 eureka-client 的jar包 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project⑥ 全局配置文件( .yml文件 )中添加 “Eureka” ( 服务提供者 )的相关配置信息 在全局配置文件application.yml中添加Eureka的相关配置信息 ( 项目自动生成的配置文件为 application.properties我们可直接将后缀名改掉就行这两个文件格式都可以只是内部的内容格式不同。) application.yml : server:port: 7006 #指定 服务提供者的端口号: 7006spring:application:name: eureka-provider #端口号名称配置 / 指定服务提供者的名称
eureka:client:register-with-eureka: true #表示将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true,所以该属性可省略不配置)fetch-registry: true #表示 从 EurekaSever 中获取 注册信息 (默认值为true,所以该属性可省略不配置)service-url:defaultZone:http://localhost:7000/eureka/ #指定EurekaServer(服务注册中心)的地址instance:hostname: localhost #主机名上面的配置信息中server.port 指定了服务提供者的端口号 , spring.application.name 指定了服务提供者 的 名称 eureka.client.service-url.defaultZone 指定了 Eureka Server ( 服务注册中心 ) 的 地址。 ⑦ 在项目启动类 上添加 EnableEurekaClient 注解 在 项目启动类 上 添加 EnableEurekaClient 注解 启动 Eureka Client功能 EurekaProviderApplication.java (项目启动类) : import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;SpringBootApplication
EnableEurekaClient //启动Eureka Client功能
public class EurekaProviderApplication {public static void main(String[] args) {SpringApplication.run(EurekaProviderApplication.class, args);}}⑧ 运行 “程序启动类” 保证EurekaServer ( 服务注册中心 )启动 的 状态下运行EurekaProviderApplication 这个项目启动类启动eureka-provider。启动成功后控制台会 输出如下信息代码 : 上述日志信息说明 eureka-provider ( 服务提供者 ) 成功注册在 EurekaServer ( 服务注册中心 )上。在浏览器中访问 : http://localhost:7000/效果如下图所示 : 由上图可见“Instances currently registered with Eureka” 这一项中注册了一个 名称为 : “EUREKA-PROVIDER” 的 服务说明 服务提供者 已经 成功注册 到 EurekaServer ( 服务注册中心 ) 中。 2.3 搭建 “Eureka Client” 作为 “服务消费者”
搭建一个 EurekaClient 作为 服务消费者。其搭建方式与搭建服务提供者基本一样具体步骤如下。 下面我们来搭建一个 EurekaClient 作为 服务消费者并将其注册在上面搭建的 Eureka Server ( 服务注册中心 ) 中具体步骤如下 ⑨ 创建 Eureka Client 项目 ( 作为 “服务消费者” ) 使用 Spring Initializr 方式创建一个名称为 : eureka-consumer 的 Spring Boot 项目这里将 Group 命名为 com.myh将 Artifact 命名为 eureka-consumer , 添加 Eureka Client 依赖。 创建好后的 pom.xml 文件代码 如下所示 : pom.xml ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- SpringBoot的版本为:2.1.7.RELEASE --version2.1.7.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdeureka-consumer/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-consumer/namedescriptioneureka-consumer/descriptionpropertiesjava.version1.8/java.version!-- Springcloud的版本为:Greenwich.SR2 --spring-cloud.versionGreenWich.SR2/spring-cloud.version/propertiesdependencies!-- 引入了 eureka-client 的jar包 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project⑩ 全局配置文件( .yml文件 )中添加 “Eureka” ( 服务消费者 ) 的相关配置信息 在全局配置文件application.yml中添加Eureka的相关配置信息 ( 项目自动生成的配置文件为 application.properties我们可直接将后缀名改掉就行这两个文件格式都可以只是内部的内容格式不同。) application.yml server:port: 7002 #指定 服务消费者的端口号: 7002spring:application:name: eureka-consumer #端口号名称配置 / 指定服务消费者的名称
eureka:client:register-with-eureka: true #表示将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true,所以该属性可省略不配置)fetch-registry: true #表示 从 EurekaSever 中获取 注册信息 (默认值为true,所以该属性可省略不配置)service-url:defaultZone:http://localhost:7000/eureka/ #指定EurekaServer(服务注册中心)的地址instance:prefer-ip-address: true #显示主机的IP地址 ( 用于指定以IP地址注册到 Eureka Server上 )上面的配置信息中server.port 指定了服务消费者的端口号 , spring.application.name 指定了服务消费者 的 名称 eureka.client.service-url.defaultZone 指定了 Eureka Server ( 服务注册中心 ) 的 地址 eureka.instance.prefer-ip-address 用于指定 以IP地址 注册到Eureka Server ( 服务注册中心 )上。 ⑪ 在项目启动类 上添加 EnableEurekaClient 注解 在 项目启动类 上 添加 EnableEurekaClient 注解 启动 Eureka Client功能 EurekaConsumerApplication.java (项目启动类) : import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;SpringBootApplication
EnableEurekaClient //启动Eureka Client功能
public class EurekaConsumerApplication {public static void main(String[] args) {SpringApplication.run(EurekaConsumerApplication.class, args);}}⑫ 运行 “程序启动类” 保证EurekaServer ( 服务注册中心 )启动 的 状态下运行EurekaConsumerApplication这个项目启动类启动eureka-consumer。启动成功后在浏览器中访问 : http://localhost:7000/效果如下图所示 : 由上图可见“Instances currently registered with Eureka” 这一项中注册了一个 名称为 : “EUREKA-CONSUMER” 的 服务说明 服务消费者 已经 成功注册 到 EurekaServer ( 服务注册中心 ) 中。 小提示 调试 Eureka 时有时 Eureka Server 主页面会提示 下图所示的 警告信息 之所以出现这样的 警告信息是因为本地调试时 触发了 Eureka Server 的保护机制。此时可以在 Eureka Server 的全局配置文件中配置 “eureka.server.enable-self-preservationfalse 参数关闭保护机制 即可。 三、搭建 Eureka “高可用集群” : 通过开发第一个Eureka应用我们认识并体验了 Eureka组件的简单用法。但是上面这个例子并 没有体现出 Eureka的高可用特性。下面我们对上面这个 Eureka应用进行改造搭建 如下图所示 的 Eureka 高可用集群。 搭建Eureka高可用集群的具体步骤如下 1. 更改系统 hosts文件 配置
① 更改系统 hosts文件 配置 由于 当前的开发环境只有一台PC操作系统为 Windows因此如果要构建集群、就需要修改 hosts 文件为其添加主机名的映射。 ① 找到 C:Windows\System32\drivers\etc\hosts 文件 把该hosts文件拉到桌面上在文件中添加以下代码内容后最后将hosts文件拉回到 “原文件夹中”。 127.0.0.1 server1
127.0.0.1 server22. 改造Eureka Server ( 服务注册中心 ) Eureka Server的高可用 实际上就是 将自己作为服务向 其他服务注册中心 “注册自己”这样就可以形成一组互相注册的服务注册中心以 实现服务清单 的 互相同步达到高可用的效果。我们 在之前项目 eureka-server 的 基础上进行扩展构建一个 双节点 的 服务注册中心集群。具体操作步骤如下所示。 ② 再建一个 Eureka Server项目 按照上面 创建 Eumeka Server 项目 的方式再搭建 一个名 eureka-server-another 的 Eumeka Server 项目 : 使用 Spring Initializr方式创建一个名称为 eureka-server-another 的 Spring Boot项目这里将Group命名为 com.myh将 Artifact 命名为eumeka-server-another添加Eureka Server 依赖。 项目创建好后的 pom.xml文件代码 如下所示 : pom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- SpringBoot的版本为:2.1.7.RELEASE --version2.1.7.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdeureka-server-another/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-server-another/namedescriptioneureka-server-another/descriptionpropertiesjava.version1.8/java.version!-- Springcloud的版本为:Greenwich.SR2 --spring-cloud.versionGreenwich.SR2/spring-cloud.version/propertiesdependencies!-- 引入了 eureka-server的jar包 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project③ 修改 eureka-server 项目 ( 第一个服务注册中心 ) 中的全局配置文件 修改项目 : eureka-server 的 全局配置文件 : application.yml。修改后的配置文件代码 如下所示 : application.yml : server:port: 7000 #服务端口号为: 7000 / 指定 服务注册中心的端口号为:7000spring:application:name: eureka-server #端口号名称配置 / 指定服务注册中心的名称eureka:client:register-with-eureka: false #表示不将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true)fetch-registry: false #表示 不从 EurekaSever 中获取 注册信息 (默认值为true)#(因为这里搭建的是Eureka Server无须注册服务也无须获取注册信息,所以 register-with-eureka 和 fetch-registry 的值都设置为false,其默认值为true )service-url:defaultZone: #设置服务注册中心地址 ( 指向第二个创建的 服务注册中心 )http://server2:7009/eureka/instance:hostname: server1 #主机名④ 修改 eureka-server-another 项目 ( 第二个服务注册中心 ) 中的全局配置文件 修改项目 : eureka-server-another 的 全局配置文件 : application.yml。修改后的配置文件代码 如下所示 : application.yml : server:port: 7009 #服务端口号为: 7009 / 指定 该服务注册中心的端口号为:7009
spring:application:name: eureka-server2 #端口号名称配置 / 指定该服务注册中心的名称eureka:client:register-with-eureka: true #表示将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true,所以该属性可省略不配置)fetch-registry: true #表示 从 EurekaSever 中获取 注册信息 (默认值为true,所以该属性可省略不配置service-url:defaultZone: #设置服务注册中心地址 ( 指向第一个创建的 服务注册中心 , 该注册操作为 : Eureka的高可用 : 将自己作为服务向其他服务注册中心 注册自己 )http://server1:7000/eureka/instance:hostname: server2 #主机名⑤ 在项目启动类 上添加 EnableEurekaServer 注解 在 项目启动类 上 添加 EnableEurekaServer 注解 启动 Eureka Server功能 3. 改造 “服务提供者”
⑥ 再创建一个 Eureka Client 项目 ( 作为 “服务提供者” ) 由于 上图 : Eureka的 Eureka 高可用集群有两个 服务提供者因此我们 还需要搭建一个服务提供者。 使用 Spring Initializr方式创建一个名称为 eureka-provider-another ( 服务提供者 )的Spring Boot项目。这里将 Group 命名为 com.myh , 将 Artifact命名为 eureka-provider-another , 添加 Web、Eureka Client 依赖。 项目创建好后的 pom.xml文件 代码如下所示 : pom.xml : ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- SpringBoot的版本为:2.1.7.RELEASE --version2.1.7.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdeureka-provider-another/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-provider-another/namedescriptioneureka-provider-another/descriptionpropertiesjava.version1.8/java.version!-- Springcloud的版本为:Greenwich.SR2 --spring-cloud.versionGreenWich.SR2/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 引入了 eureka-client 的jar包 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project⑦ 全局配置文件( .yml文件 )中添加 “Eureka” ( 服务提供者 )的相关配置信息 在全局配置文件application.yml中添加Eureka的相关配置信息 ( 项目自动生成的配置文件为 application.properties我们可直接将后缀名改掉就行这两个文件格式都可以只是内部的内容格式不同。) application.yml : server:port: 7007 #指定 该服务提供者的端口号: 7007spring:application:name: eureka-provider #端口号名称配置 / 指定该服务提供者的名称
eureka:client:register-with-eureka: true #表示将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true,所以该属性可省略不配置)fetch-registry: true #表示 从 EurekaSever 中获取 注册信息 (默认值为true,所以该属性可省略不配置)service-url:defaultZone:http://localhost:7000/eureka/ #指定EurekaServer(服务注册中心)的地址instance:hostname: localhost #主机名上面的配置信息中server.port 指定了服务提供者的端口号 , spring.application.name 指定了服务提供者 的 名称 eureka.client.service-url.defaultZone 指定了 Eureka Server ( 服务注册中心 ) 的 地址。 ⑧ 在项目启动类 上添加 EnableEurekaClient 注解 在 项目启动类 上 添加 EnableEurekaClient 注解 启动 Eureka Client功能。 4. 改造 “服务消费者” 这里搭建的 Eureka高可用集群 只有一个服务消费者。修改项目 : eureka-consumer 中的全局配置文件 application.yml。修改后的代码内容如下所示 : application.yml : server:port: 7002 #指定 服务消费者的端口号: 7002spring:application:name: demo-consumer #端口号名称配置 / 指定服务消费者的名称
eureka:client:register-with-eureka: true #表示将自己 注册 到Eureka服务注册中心 / Eureka服务端 (默认值为true,所以该属性可省略不配置)fetch-registry: true #表示 从 EurekaSever 中获取 注册信息 (默认值为true,所以该属性可省略不配置)service-url:defaultZone:http://server1:7000/eureka/,http://server2:7009/eureka/ #在两个服务注册中心中都进行注册instance:hostname: localhost #主机地址lease-renewal-interval-in-seconds: 5 #修改周期性心跳的默认时间为5s (默认为每30s发送一次)lease-expiration-duration-in-seconds: 10 #修改剔除服务的默认时间修改为10s (默认剔除时间为90s),每隔10s刷新服务列表将无效服务剔除5. 启用Eureka 高可用集群 依次启动 “两个” Eureka Server( 服务注册中心 )、两个 服务提供者、一个服务消费者。启动成功后无论访问哪个 Eureka ServerEureka Server 的 注册实例 都是 一样 的。 分别访问 http://server1:7000/ 和 http://server2:7009/ 具体效果如下图所示 : 四、Eureka 的 “常用配置”
4.1 心跳机制 Eureka是通过心跳的方式实现对各个 服务实例的 健康检测。在Eureka的 服务续约与 剔除机制下 客户端的 健康状态 从注册到 注册中心开始都会处于 UP状态除非心跳中止一段时间后服务注册中心将其剔除。心跳机制可以有效检查客户端进程 “是否正常运作”。下面将对 Eureka 心跳机制常用配置 进行讲述。 服务启动后Eureka Client ( 服务实例 )将会向 Eureka Server ( 服务注册中心 ) 发送 周期性的心跳默认是每 30 秒 发送一次可通过修改Eureka Client 实例 的 全局配置文件中 的 eureka.instance.leaseRenwalIntervalInSeconds( lease-renewal-interval-in-seconds )属性 来改变发送周期性心跳的默认时间。具体代码如下所示 : eureka:instance:lease-renewal-interval-in-seconds: 5 #修改周期性心跳的默认时间为5s (默认为每30s发送一次)Eureka Server 如果在 一定期限内没有接收到Eureka Client 实例的心跳就会 将该实例从注册中心 “剔除掉”其他客户端将 无法访问这个实例。这个期限默认值为 : 90秒可通过 eureka.instance.leaseExpriationDurationInSeconds ( lease-expiration-duration-in-seconds ) 属性 来 改变这个值。具体代码如下所示 : eureka:instance:lease-expiration-duration-in-seconds: 10 #修改剔除服务的默认时间修改为10s (默认剔除时间为90s),每隔10s刷新服务列表将无效服务剔除4.2 “自我保护机制” Eureka 的 自我保护机制 是为了 防止出现 “误杀” 服务 的情况。Eureka 注册中心 和 服务中心 都有 发生故障的可能。 如果 Eureka Server 服务注册中心 发生故障Eureka Client 服务 就有 可能不能正常续约而这个时候 , 服务 是 正常的 , 但是 注册中心 会 将超过 90秒未续约 的 服务剔除 造成 “误杀”服务 的情况。 Eureka Server 通过 判断 “是否” 存在大量 “续约失败” 的 服务从而 确定 是否开启自我保护。默认情况下Eureka Server配置的自我保护阀值是 0.85。如果Eureka Server 运行期间根据 心跳比例 接收到的服务续约 低于阀值Eureka Server 就 开启自我保护“不再剔除” 注册列表 的 信息。 但是如果在 Eureka Server 保护期间 发生了 服务下线 的 情况这时 Eureka Server 维护的 服务清单就 不那么准确了。此时可以关闭保护机制确保服务中心 不可用的服务实例被及时 剔除。 默认情况下Eureka Server 自我保护是 开启的如果需要关闭就可以在 全局配置文件 中添加下列代码 : eureka:server:enable-self-preservation: false #关系Eureka Server 自我保护机制4.3 其他配置 : 多数情况下Eureka Server 作为 现成产品不需要 “修改其配置信息” 。而 Eureka Client 作为 微服务架构中的应用不仅需要向 Eureka Server 注册还会作为服务实例 “互相调用”。下面将针对 Eureka Clent 以下两方面的配置进行讲解具体如下 : “服务注册” 相关的 “配置信息” 关于 服务注册的 相关配置信息 都是以 eureka.client 作为前缀。Eureka Client 与 服务注册相关的配置信息 如下表所示 参数名称参数说明enable启动 Eureka客户端默认值 为 tue。registryFetchIntervalSeconds从 Eureka 服务端 “获取” 注册信息的 间隔时间单位为秒默认值 为 30s。fetchRegistry是否从 Eureka 服务端 / Eureka服务注册中心 中 获取注册信息默认值为false。eurekaServerReadTimeoutSeconds读取 Eureka Server信息的 超时时间单位为秒默认值为8s。InitiallnstanceInfoReolicationInstervalSeconds初始化实例信息到 Eureka 服务端 的 间隔时间单位为 秒默认值 为 40s。instanceInfoReolicationInstervalSeconds更新 实例信息 的变化到 Eureka 服务端的 间隔时间单位为 秒默认值 为 30s。 “服务实例” 相关的 “配置信息” 关于 服务实例的 相关配置信息都以 eureka.instance 为前缀。Eureka Client 与 服务实例相关的配置信息 如下表所示 参数名称参数说明preferlpAddress是否优先使用IP 地址作为主机名的标识默认值为false。leaseRenewalIntervalInSecondsEureka 客户端 向 服务端 发送心跳的 时间间隔单位为 秒、默认值 为 30s。leaseExpirationDurationInSecondsEureka 服务端在收到最后一次心跳之后等待的 时间上限 ( 等待多少秒后剔除服务 )单位为秒默认值为90s。如果超出时间后服务端就会将该服务实例从服务清单中剔除从而禁止服务调用请求 “被发送” 到该实例上。аpрname服务名默认取 spring.application.name 的 配置值如果没有就为 unknown。hostname主机名不配置时 将根据 操作系统 的 主机名来获取。