大家好,欢迎来到IT知识分享网。
目录
三、搭建 Eureka 服务提供者 (Service Provider)
3.application.yml 添加 Eureka 注册配置
一、Eureka介绍
以下内容来自百度百科
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
Eureka的作用
Eureka是一款由Netflix开发的基于Java的服务发现框架,主要用于微服务架构中的服务注册与发现。在分布式系统中,服务实例可能频繁地启动和关闭,传统的静态配置方式难以应对这种动态变化。Eureka通过维护服务实例的注册表,解决了服务位置的不确定性问题,使得服务调用方能够通过服务名称找到服务提供方。
为什么使用Eureka
- 服务动态管理:Eureka能够动态地管理服务实例的注册和注销,即使服务实例频繁上下线也能保持服务间的正常通信。
- 容错机制:Eureka具有自我保护机制,在网络分区的情况下,服务实例不会被立即注销,从而保证了系统的高可用性。
- 简化服务发现:Eureka提供了简单易用的API,使得服务发现变得非常容易。
- 易于集成:Eureka与Spring Cloud紧密结合,可以轻松地集成到Spring Boot项目中。
服务治理
服务治理是指对服务实例进行管理和监控的过程,包括但不限于服务注册、服务发现、负载均衡、故障恢复等。Eureka通过其服务端和客户端两部分实现了服务治理的关键功能。
服务注册
服务注册是指服务实例向服务注册中心(如Eureka Server)注册自身的过程。在注册时,服务实例会提供必要的元数据,比如服务地址、端口、健康检查路径等信息。这些信息将被Eureka Server存储起来,以便后续的服务发现。
服务发现
服务发现是指服务调用方根据服务名称查找服务实例的过程。Eureka Client可以从Eureka Server获取服务实例列表,并从中选择合适的实例进行调用。服务发现过程是透明的,开发者只需要关注业务逻辑即可。
Eureka的服务端与客户端
Eureka服务端
Eureka服务端的主要职责是维护服务实例的注册表,包括以下功能:
- 服务实例注册:接收来自客户端的服务实例注册请求,并存储服务实例的信息。
- 服务实例更新:接收服务实例的心跳信号,以确定服务实例是否仍然活跃。
- 服务实例注销:如果长时间没有收到某个服务实例的心跳,则将其从注册表中移除。
- 服务实例查询:提供接口供客户端查询服务实例列表。
Eureka客户端
Eureka客户端则通常部署在每个服务实例上,其功能包括:
- 服务注册:在启动时向Eureka Server注册服务实例,并定期发送心跳信号。
- 服务发现:从Eureka Server获取服务实例列表,并根据负载均衡策略选择合适的服务实例进行调用。
- 自我保护:在网络不稳定的情况下,Eureka客户端可以进入自我保护模式,避免不必要的服务实例注销。
二、搭建Eureka服务模块
1. 创建Eureka Server项目
创建一个新的Spring Boot项目,命名为eureka-server
。
2. pom.xml
在项目的pom.xml
文件中添加Eureka Server依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Eureka Server</name> <description>Eureka Server for Service Discovery</description> <properties> <java.version>17</java.version> </properties> <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Eureka Server dependency --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3. application.yml
配置Eureka Server的application.yml
文件:
spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4. 主程序
创建主程序EurekaServerApplication.java
:
package com.example.eurekaserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
5. 修改host文件
为了支持多个服务实例在同一台机器上的测试,可以在C:\Windows\System32\drivers\etc\hosts
(Windows)或/etc/hosts
(Linux/MacOS)中添加以下行:
127.0.0.1 localhost 127.0.0.1 eureka-server
- 这样可以在本地环境中使用域名访问 Eureka Server。
三、搭建 Eureka 服务提供者 (Service Provider)
-
修改 item-service 模块
假设你有一个名为
item-service
的模块,现在需要将其改造为 Eureka 服务提供者。 -
pom.xml
在
item-service
的pom.xml
文件中添加 Eureka Client 的依赖。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
3.application.yml 添加 Eureka 注册配置
在 application.yml
文件中添加 Eureka Client 的配置。
spring: application: name: item-service eureka: client: service-url: defaultZone: http://eureka-server:8761/eureka/
4.主程序添加服务注册发现客户端
在 item-service
的主类中添加 @EnableEurekaClient
注解。
@SpringBootApplication @EnableEurekaClient public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } }
5.启动并查看服务注册情况
- 启动 Eureka Server 和
item-service
。 - 打开浏览器访问 Eureka Server 的控制台页面(默认为
http://localhost:8761/
或http://eureka-server:8761/
)。 - 查看服务实例列表,确认
item-service
是否已经成功注册。
四、Eureka 的使用
服务提供者的“高可用”
为了实现服务提供者的高可用,可以通过启动多个相同的实例来实现。这里以启动两个 item-service
实例为例。
- 配置启动参数
在
application.yml
文件中,可以为每个实例设置不同的端口号。
server: port: 8081 # 第一个实例
对于第二个实例:
server: port: 8082 # 第二个实例
- 启动两个服务,并查看注册信息
分别启动两个
item-service
实例,然后通过 Eureka Server 控制台页面查看服务实例的注册信息。确认两个实例都被成功注册。
五、Eureka 的高可用
为了实现 Eureka Server 的高可用,可以部署多个 Eureka Server 实例,并让它们互相注册,形成集群。
- 添加两个配置 yml 文件
创建两个配置文件,分别为
application-eureka1.yml
和application-eureka2.yml
。application-eureka1.yml:
spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: eureka1 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka2:8762/eureka/
application-eureka2.yml:
spring: application: name: eureka-server server: port: 8762 eureka: instance: hostname: eureka2 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka1:8761/eureka/
配置启动参数
在命令行中分别使用不同的配置文件启动两个 Eureka Server 实例。
对于第一个实例:
java -jar eureka-server.jar --spring.profiles.active=eureka1
对于第二个实例:
java -jar eureka-server.jar --spring.profiles.active=eureka2
- 启动两台服务器,查看注册信息
启动两个 Eureka Server 实例后,通过访问任何一个 Eureka Server 的控制台页面(例如
http://localhost:8761/
或http://localhost:8762/
),可以看到两个 Eureka Server 实例相互注册的情况。 - 修改 item-service 服务的 yml
修改
item-service
的application.yml
文件,使其能够注册到两个 Eureka Server 实例上。spring: application: name: item-service eureka: client: service-url: defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/134298.html