ToB企服应用市场:ToB评测及商务社交产业平台

标题: Eureka原理实践 [打印本页]

作者: 泉缘泉    时间: 2024-9-7 21:22
标题: Eureka原理实践
Eureka 是 Netflix 开源的一个服务发现组件,在微服务架构中扮演着重要的脚色。Eureka Server 提供服务注册与发现的功能,而 Eureka Client 负责将自身服务信息注册到 Eureka Server,同时也可以从 Eureka Server 获取其他服务的信息。
以下是 Eureka 的基本原理及其在实践中的应用步骤。
1. Eureka 的基本原理

1.1 Eureka Server

Eureka Server 是一个服务注册中心,全部 Eureka Client(即微服务)都会向其注册自身信息(比方主机名、IP 地点、端标语、状态等)。Eureka Server 维护着这些服务的注册信息,并提供服务发现的功能,其他服务可以通过 Eureka Server 获取服务的访问信息。
1.2 Eureka Client

Eureka Client 是微服务的一部分,它包罗两个主要的功能:

1.3 服务注册与续约机制


1.4 服务发现


2. Eureka 实践步骤

2.1 创建 Eureka Server

起首,创建一个 Eureka Server。
1. 创建一个 Spring Boot 项目:
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:

2. 设置 Eureka Server:
在项目标主类中添加 @EnableEurekaServer 注解:
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  4. @SpringBootApplication
  5. @EnableEurekaServer
  6. public class EurekaServerApplication {
  7.     public static void main(String[] args) {
  8.         SpringApplication.run(EurekaServerApplication.class, args);
  9.     }
  10. }
复制代码
3. 设置文件 application.yml:
  1. server:
  2.   port: 8761
  3. eureka:
  4.   client:
  5.     register-with-eureka: false  # 不向自身注册
  6.     fetch-registry: false        # 不拉取注册表
  7. spring:
  8.   application:
  9.     name: eureka-server
复制代码
4. 启动 Eureka Server:
运行 EurekaServerApplication,Eureka Server 会在 http://localhost:8761/ 启动,你可以在浏览器中查看 Eureka 的控制台。
2.2 创建 Eureka Client

接下来,创建一个将注册到 Eureka Server 的服务。
1. 创建一个新的 Spring Boot 项目:
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:

2. 设置 Eureka Client:
在项目标主类中添加 @EnableEurekaClient 注解:
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  4. @SpringBootApplication
  5. @EnableEurekaClient
  6. public class EurekaClientApplication {
  7.     public static void main(String[] args) {
  8.         SpringApplication.run(EurekaClientApplication.class, args);
  9.     }
  10. }
复制代码
3. 设置文件 application.yml:
  1. server:
  2.   port: 8080
  3. eureka:
  4.   client:
  5.     service-url:
  6.       defaultZone: http://localhost:8761/eureka/  # 指定 Eureka Server 的地址
  7.   instance:
  8.     prefer-ip-address: true
  9. spring:
  10.   application:
  11.     name: eureka-client
复制代码
4. 创建一个简单的 REST 控制器:
  1. import org.springframework.web.bind.annotation.GetMapping;
  2. import org.springframework.web.bind.annotation.RestController;
  3. @RestController
  4. public class HelloController {
  5.     @GetMapping("/hello")
  6.     public String hello() {
  7.         return "Hello from Eureka Client!";
  8.     }
  9. }
复制代码
5. 启动 Eureka Client:
运行 EurekaClientApplication,该服务会自动注册到 Eureka Server 上。
2.3 服务发现与调用

如果你有多个服务注册在 Eureka Server 上,你可以使用 RestTemplate 或 Feign 来实现服务间的调用。
使用 RestTemplate 实现服务调用:
  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.cloud.client.ServiceInstance;
  3. import org.springframework.cloud.client.discovery.DiscoveryClient;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import org.springframework.web.client.RestTemplate;
  7. import java.util.List;
  8. @RestController
  9. public class ServiceController {
  10.     @Autowired
  11.     private DiscoveryClient discoveryClient;
  12.     @GetMapping("/invoke")
  13.     public String invokeService() {
  14.         List<ServiceInstance> instances = discoveryClient.getInstances("eureka-client");
  15.         if (instances.size() > 0) {
  16.             String serviceUri = instances.get(0).getUri().toString() + "/hello";
  17.             RestTemplate restTemplate = new RestTemplate();
  18.             return restTemplate.getForObject(serviceUri, String.class);
  19.         }
  20.         return "No instances available!";
  21.     }
  22. }
复制代码
当你访问 /invoke 端点时,它会调用注册在 Eureka 上的 eureka-client 服务的 /hello 端点,并返回效果。
3. 集群与高可用性

为了实现高可用性,你可以摆设多个 Eureka Server 实例并将它们组成一个集群。Eureka Server 可以通过设置相互注册,从而实现高可用性。
集群设置示例:
  1. eureka:
  2.   client:
  3.     service-url:
  4.       defaultZone: http://eureka-server-1:8761/eureka/,http://eureka-server-2:8762/eureka/
复制代码
在这种设置下,每个 Eureka Client 会向多个 Eureka Server 注册,并且 Eureka Server 之间也会同步注册表信息,从而实现容灾和负载均衡。
4. Eureka 的自我掩护机制

Eureka 具有自我掩护机制,当大量客户端忽然失去接洽时,Eureka 不会立即将这些实例移出注册表,以防止网络分区或瞬时故障导致的错误判断。
这种机制可以通过以下设置控制:
  1. eureka:
  2.   server:
  3.     enable-self-preservation: true
复制代码
当自我掩护机制启用时,纵然没有收到心跳,Eureka Server 也不会立即将服务标记为不可用。
总结

Eureka 作为服务注册和发现组件,在微服务架构中起着关键作用。通过 Eureka,可以实现服务的自动注册与发现,简化了服务之间的通信流程。同时,Eureka 还提供了高可用性和自我掩护机制,保障服务的可靠性。在实践中,通过设置 Eureka Server 和 Eureka Client,你可以轻松构建一个支持服务自动化管理的分布式体系。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4