Eureka简介与开发

news/2024/9/19 4:46:27/ 标签: eureka

Eureka 是由 Netflix 开源的服务发现和注册中心,它提供了服务的注册与发现功能,是 Spring Cloud 体系中的核心组件之一。Eureka 采用 C/S 架构,包含 Eureka Server 和 Eureka Client 两个主要的组件。

**Eureka Server** 充当服务注册中心,它提供服务注册和发现的功能,各个微服务实例在启动时会将自己的信息(如IP地址、端口号等)注册到 Eureka Server。Eureka Server 也会提供心跳机制来检查服务实例是否仍然活跃。

**Eureka Client** 是一个 Java 客户端,用于简化与 Eureka Server 的交互。它包含了服务注册和发现的相关逻辑,使得各个微服务能够注册自己提供者的服务,同时也能够发现其他服务。

Eureka 的工作原理包括以下几个关键点:
1. **服务注册**:微服务启动时,通过 Eureka Client 向 Eureka Server 注册自己的信息。
2. **心跳续约**:微服务会定期发送心跳到 Eureka Server 来续约,表明自己仍然活跃。
3. **服务发现**:微服务可以通过 Eureka Server 查询其他服务的信息,实现服务调用。
4. **服务下线**:微服务在关闭时会发送取消请求到 Eureka Server,表明自己将下线。
5. **服务剔除**:Eureka Server 会定期剔除未能续约的服务实例。
6. **自我保护机制**:Eureka Server 会根据自身的健康状况决定是否进入自我保护模式,以避免因网络问题导致大量服务被错误地剔除。

Eureka 支持集群部署,即多个 Eureka Server 节点相互注册,形成高可用的注册中心。在集群模式下,Eureka Server 之间会同步服务注册信息,以确保服务的高可用性。

在使用 Eureka 时,开发者通常会在 Spring Boot 应用中引入 `spring-cloud-starter-netflix-eureka-server` 依赖来启动 Eureka Server,以及引入 `spring-cloud-starter-netflix-eureka-client` 依赖来作为 Eureka Client 使用。

Eureka 与其他服务注册中心(如 Consul、Zookeeper)相比,更注重服务的可用性而不是一致性,这在云部署环境中尤为重要。Eureka 的设计哲学是“宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例”,这在一定程度上提高了系统的容错性。

Eureka 的使用和配置相对简单,但它也有一些限制,比如不支持复杂的路由规则、服务版本管理等。因此,在选择服务注册中心时,需要根据具体的业务需求和环境来决定是否使用 Eureka。      
 

开发一个基于 Eureka 的服务注册与发现系统涉及以下步骤:

### 1. 环境准备
- 安装Java开发环境(JDK 1.8或以上版本)。
- 安装构建工具,如Maven或Gradle。
- 安装IDE,如IntelliJ IDEA或Eclipse。
- 安装Git(如果使用Git进行版本控制)。

### 2. 创建Eureka Server
- **创建项目**:在IDE中创建一个新的Spring Boot项目,或者使用Spring Initializr(https://start.spring.io/)生成项目结构。
- **添加依赖**:在项目的`pom.xml`文件中添加`spring-cloud-starter-netflix-eureka-server`依赖。
- **配置文件**:在`src/main/resources/application.yml`或`application.properties`中配置Eureka Server的基本信息,如端口号和实例名称。
- **主启动类**:创建一个带有`@EnableEurekaServer`注解的主启动类,启动Eureka Server。

### 3. 启动Eureka Server
- 运行主启动类,启动Eureka Server。
- 访问Eureka Server的UI界面(通常是`http://localhost:8761`),确认Eureka Server正常运行。

### 4. 创建微服务
- **创建项目**:为每个微服务创建一个新的Spring Boot项目。
- **添加依赖**:在项目的`pom.xml`文件中添加`spring-cloud-starter-netflix-eureka-client`依赖。
- **配置文件**:在`src/main/resources/application.yml`或`application.properties`中配置微服务的基本信息,如端口号、Eureka Server的地址等。
- **主启动类**:创建一个带有`@EnableEurekaClient`或`@EnableDiscoveryClient`注解的主启动类。

### 5. 注册微服务到Eureka Server
- 启动微服务,它们会自动注册到Eureka Server。
- 在Eureka Server的UI界面上查看注册的微服务列表。

### 6. 服务间调用
- 使用`RestTemplate`或`FeignClient`进行服务间调用。
- 如果使用`FeignClient`,需要添加`spring-cloud-starter-openfeign`依赖,并创建相应的Feign客户端接口。

### 7. 测试和验证
- 编写单元测试和集成测试来验证服务的功能。
- 使用Postman或类似工具进行API测试。

### 8. 构建和部署
- 使用Maven或Gradle构建项目。
- 将构建的jar包部署到服务器或容器中。

### 9. 监控和维护
- 监控Eureka Server和微服务的健康状况。
- 定期更新和维护代码,修复发现的问题。

### 示例代码
以下是创建Eureka Server和微服务的简化示例代码:

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);}
}
server:port: 8080eureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: true
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class ServiceApplication {public static void main(String[] args) {SpringApplication.run(ServiceApplication.class, args);}
}


 


http://www.ppmy.cn/news/1520685.html

相关文章

读懂以太坊源码(3)-详细解析genesis.json

要想搞懂以太坊的源代码逻辑,必须要了解以太坊创世区块配置文件(genesis.json)的结构,以及每个配置参数的意义,创世配置文件,主要作用是设置链的ID,指定以太坊网络中硬分叉发生的区块高度,以及初始ETH数量的…

DuplicateKeyException产生原因及解决方案

DuplicateKeyException 是 Spring 框架中与数据库操作相关的异常之一,通常在试图向数据库中插入一条记录时,违反了唯一性约束(如主键或唯一索引约束)时抛出。这意味着数据库中已经存在具有相同键值的记录,导致插入操作…

小程序中用于跳转页面的5个api是什么?区别是什么

小程序中用于跳转页面的5个主要API分别是wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab和wx.navigateBack。这些API各自具有不同的功能和特点,适用于不同的页面跳转场景。以下是它们的详细介绍及区别: 1. wx.navigateTo 功能:保…

认识爬虫技术

爬虫目的 网络爬虫,主要目的是代替人工收集网络数据。 应用场景主要包括两个方面: 网页收集的数据量少,但重复操作频率高; 通过网页搜集数据的量大。 只要满足以上两个应用场景,其实都可以考虑使用爬虫技术降低人…

TCP协议 配合 Wireshark 分析数据

在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动 客户端(Client):通常是指主动发起连接请求的一方。例如&#xf…

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图: 目录 思维导图: 一、插入排序 1.直接插入排序: a:基本思想: b:基本步骤: c:复杂度分析 d:Java代码实现: 2.希尔排序(缩小增量排序) a:基本思想: c…

VMware部署linux系统

前期准备 安装VMware的相关教程在我的另一篇博客。 VMware的安装教程-CSDN博客 CentOS7.6的安装包 链接:https://pan.baidu.com/s/1sl8COPAC_VEcRtKxvu2S1A?pwd84el 提取码:84el 如果觉得百度网盘速度太慢,可以去镜像下载也可以 阿里…

对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)

背景引入:如图所示,笔者需要对数十个表格的银行日记账工作簿合并成一个工作簿,以便与本月银行流水进行核对。 为了方便银行日记账与银行流水进行核对,需要再每个村或小组的表格中,将村或小组的名称放在J列。 clear c…

mongodb在Java中条件分组聚合查询并且分页(时间戳,按日期分组,年月日...)

废话不多说,先看效果图: SQL查询结果示例: 多种查询结果示例: 原SQL: db.getCollection("hbdd_order").aggregate([{// 把时间戳格式化$addFields: {orderDate: {"$dateToString": {"for…

51单片机-独立按键

时间&#xff1a;2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机 代码&#xff1a; #include <REGX52.H> #include "intrins.h"void Delay1ms(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms--){_nop_();i 2;j 199;do{…

ORA-01186: file 201 failed verification tests

环境&#xff1a;oracle11.2.0.4RACASMred hat6.1x64 主库两节点RAC&#xff0c;备库也为两节点RAC。 备库启用为实时应用查询。日志应用等都是正常的。 主库asm group如下&#xff1a; ASMCMD> ls CRS/DATA/ FRA/ 备库asm group如下&#xff1a; ASMCMD> ls CRS/SDATA/ …

西北工业大学oj-打印杨辉三角

用函数编程计算并输出如图所示的杨辉三角&#xff0c;行数由用户输入。 这道题就很简单了知道杨辉三角的规律&#xff0c;前后都是1&#xff0c;中间数字等于左上加右上 杨辉三角可以通过递推公式计算&#xff1a;C(n, k) C(n-1, k-1) C(n-1, k)&#xff0c;其中 C(n, k) 表…

掌控安全CTF-2024年8月擂台赛-ez_misc

题解&#xff1a; 题目给了一个流量包和一个加密的zip文件&#xff0c;我们首先打开流量包&#xff0c;很多流量&#xff0c;查看一下http协议&#xff0c;发现是个sql靶场&#xff0c;找到关键字样flag&#xff0c;得到一串字符&#xff1a; LJWXQ2C2GN2DAYKHNR5FQMTMPJMDER…

STM32F103C8----GPIO(跟着江科大学STM32)

一&#xff0c;GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff08;0V&#xff09;&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动…

【机器学习-随记】使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员

使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员 1. 平台选择与集成 2. 消息机器人开发 3. 自然语言处理 (NLP) 4. 虚拟助手功能实现 5. 语音助手集成 6. 安全与用户隐私 7. 测试与部署 &#x1f388;边走、边悟&#x1f388;迟早会好 实现一个虚拟客…

基于精益六西格玛管理方法进行生产线综合改善

生产线精益六西格玛改善是一个系统工程&#xff0c;只有对其进行系统的策划与组织&#xff0c;才能收到良好的改善效果。一般来说&#xff0c;需要成立一个专门的精益六西格玛推进组织&#xff0c;由其完成一系列的组织、准备工作。具体如下&#xff1a; &#xff08;1&#xf…

王立铭脑科学50讲后续1,自己从课程中提起自己所需的知识,安放到自己的知识体系中。

王立铭脑科学50讲后续1&#xff0c;自己从课程中提起自己所需的知识&#xff0c;安放到自己的知识体系中。 建立第一版——对人类智慧的框架&#xff0c;后期的所有相关知识都安装在这个框架里&#xff0c;不断修正这个框架。 最底层&#xff1a;感知输入系统和动作输出系统&a…

高效过滤器检漏过程中上游浓度过低过高什么原因?

洁净区高效过滤器检漏是确保洁净环境正常运行的重要环节&#xff0c;但是很多企业检测人员&#xff0c;在进行高效过滤器检漏过程中&#xff0c;经常会遇到一些突发问题无法解决&#xff0c;今天中邦兴业技术工程师团队给大家汇总了一些高效过滤器检漏过程中常见问题&#xff0…

【C++】STL学习——vector模拟实现

目录 vector介绍vector函数接口总览结构介绍默认成员函数构造函数1构造函数2构造函数3经典的深浅拷贝拷贝构造赋值重载析构函数 迭代器begin和end 容量相关函数sizecapacityemptyreserveresize 访问operator[] 修改相关函数insertpush_backerasepop_backclearswap 迭代器失效问…

DataGridView用法合集【精品】

目录 1.当前的单元格属性取得、变更 2.DataGridView编辑属性 3.DataGridView最下面一列新追加行非表示 4.判断当前选中行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行…