赞
踩
目录
三、搭建 Eureka 服务提供者 (Service Provider)
3.application.yml 添加 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是一款由Netflix开发的基于Java的服务发现框架,主要用于微服务架构中的服务注册与发现。在分布式系统中,服务实例可能频繁地启动和关闭,传统的静态配置方式难以应对这种动态变化。Eureka通过维护服务实例的注册表,解决了服务位置的不确定性问题,使得服务调用方能够通过服务名称找到服务提供方。
服务治理是指对服务实例进行管理和监控的过程,包括但不限于服务注册、服务发现、负载均衡、故障恢复等。Eureka通过其服务端和客户端两部分实现了服务治理的关键功能。
服务注册是指服务实例向服务注册中心(如Eureka Server)注册自身的过程。在注册时,服务实例会提供必要的元数据,比如服务地址、端口、健康检查路径等信息。这些信息将被Eureka Server存储起来,以便后续的服务发现。
服务发现是指服务调用方根据服务名称查找服务实例的过程。Eureka Client可以从Eureka Server获取服务实例列表,并从中选择合适的实例进行调用。服务发现过程是透明的,开发者只需要关注业务逻辑即可。
Eureka服务端的主要职责是维护服务实例的注册表,包括以下功能:
Eureka客户端则通常部署在每个服务实例上,其功能包括:
创建一个新的Spring Boot项目,命名为eureka-server
。
在项目的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>
配置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/
创建主程序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);
- }
-
- }
为了支持多个服务实例在同一台机器上的测试,可以在C:\Windows\System32\drivers\etc\hosts
(Windows)或/etc/hosts
(Linux/MacOS)中添加以下行:
- 127.0.0.1 localhost
- 127.0.0.1 eureka-server
这样可以在本地环境中使用域名访问 Eureka Server。
假设你有一个名为 item-service
的模块,现在需要将其改造为 Eureka 服务提供者。
在 item-service
的 pom.xml
文件中添加 Eureka Client 的依赖。
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- </dependencies>
在 application.yml
文件中添加 Eureka Client 的配置。
- spring:
- application:
- name: item-service
- eureka:
- client:
- service-url:
- defaultZone: http://eureka-server:8761/eureka/
在 item-service
的主类中添加 @EnableEurekaClient
注解。
- @SpringBootApplication
- @EnableEurekaClient
- public class ItemServiceApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(ItemServiceApplication.class, args);
- }
- }
item-service
。http://localhost:8761/
或 http://eureka-server:8761/
)。item-service
是否已经成功注册。为了实现服务提供者的高可用,可以通过启动多个相同的实例来实现。这里以启动两个 item-service
实例为例。
配置启动参数
在 application.yml
文件中,可以为每个实例设置不同的端口号。
- server:
- port: 8081 # 第一个实例
对于第二个实例:
- server:
- port: 8082 # 第二个实例
启动两个服务,并查看注册信息
分别启动两个 item-service
实例,然后通过 Eureka Server 控制台页面查看服务实例的注册信息。确认两个实例都被成功注册。
为了实现 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/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。