使用Eureka实现服务注册与发现的具体案例详解

ops/2024/11/29 19:05:35/

1. Eureka 的基本概念

1.1 什么是 Eureka?

Eureka 是一个基于 REST 的服务注册和发现平台,主要分为以下两个组件:

  • Eureka Server:作为服务注册中心,负责维护服务实例信息。
  • Eureka Client:服务消费者与服务提供者都通过 Eureka Client 与 Eureka Server 交互。

Eureka 的核心目标是:

  • 服务动态注册与注销:服务启动后自动注册,停止时自动从注册中心移除。
  • 服务发现:通过注册中心查找可用服务。

1.2 Eureka 的工作原理

Eureka 的工作机制如下:

  1. 服务实例在启动时向 Eureka Server 注册。
  2. 服务消费者从 Eureka Server 获取服务列表以便调用。
  3. 服务实例定期发送心跳来保持注册状态,Eureka Server 持续监控实例的可用性。
  4. 服务实例停止时,向 Eureka Server 发送注销请求,或在心跳超时后被移除。

2. 实战:搭建基于 Eureka 的服务注册与发现系统

2.1 环境准备

  1. JDK 版本:8 或以上
  2. Spring Boot:2.5.x 或更高版本
  3. Maven:依赖管理工具

2.2 创建 Eureka Server

2.2.1 新建项目

通过 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Eureka Server
2.2.2 配置 pom.xml

确保 pom.xml 包含以下 Eureka Server 依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.2.3 配置 application.yml

配置 Eureka Server 的基本信息:

server:port: 8761spring:application:name: eureka-servereureka:client:register-with-eureka: falsefetch-registry: falseserver:enable-self-preservation: false
2.2.4 启动 Eureka Server

在主类中添加 @EnableEurekaServer 注解,标记为 Eureka Server:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

启动项目后,访问 http://localhost:8761,可看到 Eureka Server 的管理页面。

2.3 创建服务提供者(Provider)

2.3.1 新建项目

创建一个新的 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Eureka Client
2.3.2 配置 pom.xml

确保 pom.xml 包含 Eureka Client 依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.3.3 配置 application.yml

配置服务提供者的基本信息:

server:port: 8081spring:application:name: provider-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/
2.3.4 实现业务接口

创建一个简单的 RESTful 接口:

@RestController
public class ProviderController {@GetMapping("/hello")public String sayHello() {return "Hello from Provider!";}
}

启动服务提供者后,Eureka Server 的管理页面中将显示 provider-service

2.4 创建服务消费者(Consumer)

2.4.1 新建项目

创建一个新的 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Eureka Client
  • Spring Cloud LoadBalancer
2.4.2 配置 pom.xml

添加所需依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2.4.3 配置 application.yml

配置服务消费者的基本信息:

server:port: 8082spring:application:name: consumer-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/
2.4.4 调用服务

通过 RestTemplate 调用服务提供者:

@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/consume")public String consumeService() {String url = "http://provider-service/hello";return restTemplate.getForObject(url, String.class);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

启动服务消费者后,访问 http://localhost:8082/consume,可调用服务提供者的接口。


3. 总结

通过上述案例,我们完整实现了基于 Eureka 的服务注册与发现功能。Eureka 提供了高效、动态的服务管理方式,在微服务架构中起到了核心作用。虽然 Netflix 宣布停止维护 Eureka,但其简单、直观的设计仍然是学习服务注册与发现的重要工具。此外,了解类似的服务注册工具(如 Consul、Zookeeper)也有助于构建更全面的知识体系。

希望本文的案例能帮助你快速上手 Eureka,并为构建微服务系统打下坚实的基础!


http://www.ppmy.cn/ops/137724.html

相关文章

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后&#xff0c;第三方jar会被打包进去吗&#xff1f; 答案是肯定的。做了实验如下&#xff1a; 第三方jar的项目结构及jar包结构如下&#xff1a;&#xff08;该第三方jar采用的是maven工程&#xff0c;打包为普通jar&#xf…

faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-5

训练过程 通过gdb调试得到这个ivfsq的训练过程&#xff0c;我尝试对这个内容具体训练过程进行解析&#xff0c;对每个调用栈里面的逻辑和代码进行解读。 步骤函数名称调用位置说明1faiss::IndexIVF::train/faiss/IndexIVF.cpp:1143开始训练&#xff0c;判断是否需要训练第一级…

uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?

在uniapp(App端)中实现自定义弹框&#xff0c;可以通过创建一个透明页面来实现。点击进入当前页面时&#xff0c;页面背景会变透明&#xff0c;用户可以根据自己的需求进行自定义&#xff0c;最终效果类似于弹框。 遇到问题&#xff1a;当打开弹窗(进入弹窗页面)就会触发当前页…

适配器模式(一种设计模式)

适配器模式, 也叫包装器模式. 将⼀个类的接⼝&#xff0c;转换成客⼾期望的另⼀个接⼝, 适配器让原本接⼝不兼容的类可以合作无间。 简单来说就是⽬标类不能直接使⽤, 通过⼀个新类进⾏包装⼀下, 适配调⽤⽅使⽤. 把两个不兼容的接⼝通过⼀定的⽅式使之兼容. 回忆一下slf4j模式…

23种设计模式-生成器(Builder)设计模式

文章目录 一.什么是生成器设计模式&#xff1f;二.生成器模式的特点三.生成器模式的结构四.生成器模式的优缺点五.生成器模式的 C 实现六.生成器模式的 Java 实现七.代码解析八. 总结 类图&#xff1a; 生成器设计模式类图 一.什么是生成器设计模式&#xff1f; 生成器模式&am…

linux(redhat8)如何安装mysql8.0之rpmtar双版本(最新版)(内网)(离线)

一.环境 系统版本&#xff1a;Red Hat 8.5.0-20 Java环境&#xff1a;build 1.8.0_181-b13 MYSQL&#xff1a;8.x版本 二、查看内核版本 #查看内核版本&#xff0c;根据内核版本下载对应的安装包 cat /proc/version 三、安装方式 一、rpm包方式 一、下载安装包 1. 登录网…

Web登录页面设计

记录第一个前端界面&#xff0c;暑假期间写的&#xff0c;用了Lottie动画和canvas标签做动画&#xff0c;登录和注册也连接了数据库。 图片是从网上找的&#xff0c;如有侵权私信我删除&#xff0c;谢谢啦~