赞
踩
随着微服务架构的普及,服务发现成为了分布式系统中的一个重要组成部分。Eureka 是 Netflix 开源的一款基于 REST 服务的服务发现组件,主要用于定位服务,以实现云端中间层服务发现和故障转移。本文将介绍 Eureka 的基本原理,并通过一个简单的实践案例来展示如何使用 Eureka 进行服务发现。
Eureka 是 Netflix 的一款服务发现框架,它基于 REST 服务实现,用于定位服务,以实现云端中间层服务发现和故障转移。Eureka 包含两个组件:Eureka Server 和 Eureka Client。
Eureka 使用了一个完全去中心化的模型。所有的节点既是服务提供者也是服务消费者。每个节点都会启动一个 Eureka Client,并定期向 Eureka Server 发送心跳消息来表明自己仍然可用。如果 Eureka Server 在一定时间内没有收到某个节点的心跳,它会将该实例从服务注册表中移除。
创建项目:使用 Spring Initializr 创建一个 Spring Boot 项目,添加 spring-boot-starter-eureka-server
依赖。
配置文件:编辑 application.yml
文件。
深色版本
- 1server:
- 2 port: 8761
- 3
- 4eureka:
- 5 instance:
- 6 hostname: localhost
- 7 client:
- 8 register-with-eureka: false
- 9 fetch-registry: false
- 10 service-url:
- 11 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动类:添加 @EnableEurekaServer
注解。
深色版本
- 1import org.springframework.boot.SpringApplication;
- 2import org.springframework.boot.autoconfigure.SpringBootApplication;
- 3import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
- 4
- 5@SpringBootApplication
- 6@EnableEurekaServer
- 7public class EurekaServerApplication {
- 8
- 9 public static void main(String[] args) {
- 10 SpringApplication.run(EurekaServerApplication.class, args);
- 11 }
- 12}
运行:启动 Eureka Server 应用,访问 http://localhost:8761
查看服务注册界面。
创建项目:使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加 spring-boot-starter-web
和 spring-cloud-starter-netflix-eureka-client
依赖。
配置文件:编辑 application.yml
文件。
深色版本
- 1server:
- 2 port: 8080
- 3
- 4eureka:
- 5 client:
- 6 service-url:
- 7 defaultZone: http://localhost:8761/eureka/
- 8 register-with-eureka: true
- 9 fetch-registry: true
- 10 instance:
- 11 prefer-ip-address: true
- 12 lease-expiration-duration-in-seconds: 90
- 13 lease-renewal-interval-in-seconds: 30
- 14 metadata-map:
- 15 instanceId: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
启动类:添加 @EnableEurekaClient
注解。
深色版本
- 1import org.springframework.boot.SpringApplication;
- 2import org.springframework.boot.autoconfigure.SpringBootApplication;
- 3import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
- 4
- 5@SpringBootApplication
- 6@EnableEurekaClient
- 7public class EurekaClientApplication {
- 8
- 9 public static void main(String[] args) {
- 10 SpringApplication.run(EurekaClientApplication.class, args);
- 11 }
- 12}
控制器:创建一个简单的 REST 控制器。
java深色版本
- 1import org.springframework.web.bind.annotation.GetMapping;
- 2import org.springframework.web.bind.annotation.RestController;
- 3
- 4@RestController
- 5public class MyController {
- 6
- 7 @GetMapping("/hello")
- 8 public String hello() {
- 9 return "Hello from Eureka Client!";
- 10 }
- 11}
运行:启动 Eureka Client 应用,再次访问 Eureka Server 的界面,可以看到刚刚启动的服务实例已经被注册。
创建另一个 Eureka Client:按照上面的步骤创建第二个 Eureka Client。
调用服务:在第二个 Eureka Client 中添加一个 REST 控制器,用于调用第一个 Eureka Client 的 /hello
接口。
深色版本
- 1import org.springframework.beans.factory.annotation.Autowired;
- 2import org.springframework.web.bind.annotation.GetMapping;
- 3import org.springframework.web.bind.annotation.RestController;
- 4import org.springframework.web.client.RestTemplate;
- 5
- 6@RestController
- 7public class ServiceDiscoveryController {
- 8
- 9 private final RestTemplate restTemplate;
- 10
- 11 @Autowired
- 12 public ServiceDiscoveryController(RestTemplate restTemplate) {
- 13 this.restTemplate = restTemplate;
- 14 }
- 15
- 16 @GetMapping("/call-service")
- 17 public String callService() {
- 18 String response = restTemplate.getForObject("http://eureka-client/hello", String.class);
- 19 return "Called service: " + response;
- 20 }
- 21}
运行:启动第二个 Eureka Client 应用,访问 http://localhost:8081/call-service
来调用第一个 Eureka Client 的接口。
通过本文的学习,你应该已经掌握了 Eureka 服务发现的基本原理,并且能够通过实践案例了解如何在实际项目中使用 Eureka 进行服务注册和服务发现。Eureka 为微服务架构提供了一个简单而有效的服务发现解决方案,能够帮助你构建健壮、可扩展的分布式系统。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。