Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
文章目录
- Eureka
- Eureka组件可以实现哪些功能
- 什么是CAP原则?
- 服务注册代码实战
- 搭建注册中心
- 服务A搭建
- 服务B搭建
- 启动服务
- 启动注册中心
- 启动服务A
- 启动服务B
- 结束语
Eureka
这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中,服务之间的调用实现我会再下一篇文章中进行讲解!
Eureka组件可以实现哪些功能
Eureka主要是做:
注册发现中心
服务注册与发现的组件
什么是CAP原则?
说到Eureka不得不提到了CAP,那么什么是CAP原则呢,下面一起来看下!
CAP 原则:
又称 CAP 定理,指的是在一个分布式系统中。
CAP原则三大特性:
一致性 (Consistency):
在集群中,三个机器的数据是一致的。
可用性I(Availability):
当有一个节点挂掉了整个集群可以继续对外提供服务。
分区容错性 (Partition tolerance):
由于机房网络或者分区等原因会导致各个机器中的数据短暂不一致。
(这个特性是不可避免的)CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
说到这里再提一下Eureka
和Zookeeper
的区别?
Zookeeper:
遵循CP原则
Eureka:
AP原则:注重AP高可用
服务注册代码实战
整体核心实现图
搭建注册中心
下面我来通过代码的方式详细的看下如何来快速实现Eureka的使用
只需要建我标记红色框的项目,其它的不需要建,我这边是之前做的服务注册中心集群所以会有好几个注册中心
首先把目录结构给建起来,Maven项目
注意:新增项目的时候选择Java8
按照我图上的这个建,新建项目流程这边我不一一去说了,不明白的可以私信我!
第一步
先去新建注册中心01-eureka-server
第二步
修改EurekaServerApplication
启动类,添加@EnableEurekaServer
注解,意思是开启Eureka的注册中心的,启动类里面只需要修改一个地方添加开启Eureka注解
功能。
源码如下:
package com.powernode;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer //开启Eureka的注册中心的功能
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}}
第三步
修改yml文件(配置文件)
源码如下:
每一个配置代表什么意思我都一一添加了注释,先按照我这种方式去改。
#单机
server:port: 8761 # eureka的默认端口
spring:application:name: eureka-server # 应用名称 不要使用特殊字符
eureka: #Eureka的配置分三类 server client 实例的 eureka-server既是服务端又是客户端server: #服务端每间隔多少毫秒定期删除的操作(默认是30000(30秒))eviction-interval-timer-in-ms: 10000renewal-percent-threshold: 0.85 # 续约百分比 超过85的应用没有和你续约 那么erueka不会踢除任何应用instance: # 实例的配置instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}} # 主机名称 : 应用名称 : 端口号
# hostname: localhost # 主机名称 或者 服务的IP
# prefer-ip-address: true #以IP的形式显示具体的服务信息
# lease-renewal-interval-in-seconds: 5 # 服务实例的续约的时间间隔
第四步
修改pom文件
注意:
是01-eureka-server的pom文件
,因为这块要去指定spring Cloud以及spring Boot版本。
按照我标红色的框去修改
服务A搭建
服务A对应的项目名称是:02-eureka-client-a
,千万不要改错地方哈!
第一步
先去修改yml配置文件。
源码如下:
每一个配置代表什么意思我都一一添加了注释,先按照我这种方式去改。
server:port: 8702 # 客户端端口没有要求
spring:application:name: eureka-client-a
# 注册 发送信息
eureka:client:service-url: # 指定注册地址defaultZone: http://localhost:8761/eurekaregister-with-eureka: true # 可以不往eureka-server注册fetch-registry: true # 应用是否去拉取服务列表到本地# 每个10秒中去注册中心重新进行拉取 时间越短脏毒越少 性能消耗大registry-fetch-interval-seconds: 10 # 为了缓解服务列表的脏毒问题instance:hostname: localhost # 应用的主机名称 最好谢主机ipinstance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}prefer-ip-address: true # 显示iplease-renewal-interval-in-seconds: 10 # 实例续约的时间
第二步
修改pom文件,按图修改
服务B搭建
服务A对应的项目名称是:02-eureka-client-b
,千万不要改错地方哈!
和服务A类似
第一步
先去修改yml配置文件。
源码如下:
每一个配置代表什么意思我都一一添加了注释,先按照我这种方式去改。
server:port: 8703 # 客户端端口没有要求
spring:application:name: eureka-client-b
# 注册 发送信息
eureka:client:service-url: # 指定注册地址defaultZone: http://localhost:8761/eureka
第二步
修改pom文件,按图修改
启动服务
启动注册中心
先启动注册中心01-eureka-server
,在启动服用A和服务B
,
启动方式:点击启动文件,然后点击绿色的三角选择运行模式或者调试模式都可以
看到下图这个,说明就已经启动成功了,返回状态码为204。
注意:重点来了非常重点
,在浏览器地址栏中直接输入http://localhost:8761/
如果你输入完http://localhost:8761/
给你返回的是这个页面,恭喜你Eureka注册中心启动成功!
,接着再去启动服务。
启动服务A
还是这种方式去启动,运行模式和调试模式都可以。
启动成功后会显示如下图所示,状态显示204。
注意:重点来了非常重点
,在浏览器地址栏中直接输入http://localhost:8761/
,或者是刚才已经打开这个地址了,直接F5刷新页面。
可以清除的看到在注册中心上方有一个应用名称为:EUREKA-CLIENT-A
的服务注册进来了,很好,继续启动服务B。
启动服务B
服务B还是按照服务A的方式去启动,我们可以清楚的看到目前有三个服务正在运行
,分别是注册中心、服务A和服务B,回到浏览器,还是那个网址下,F5刷新。
很好
,可以看到服务B也注册进来了。
结束语
至此就完成了一个注册中心和两个服务模块的注册功能的实现,按照我的这种方式去搭建项目和代码实现,不明白的博主私信,大家可以看到我还有其他的组件
这是常用的Spring Cloud组件
,还有第二张图的各个组件的服务,nacos文件配置中心搭建、手写网关、熔断器等等,都是源码,有需要的博主可以私信我,不收取任何费用,如果你有不明白的地方我还会免费为你进行解答,希望能帮助到大家!
本期分享就到这里咯,下期分享rabbon实现远程调用。
相关文章:

Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
文章目录 EurekaEureka组件可以实现哪些功能什么是CAP原则?服务注册代码实战搭建注册中心服务A搭建服务B搭建启动服务启动注册中心启动服务A启动服务B 结束语 Eureka 这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中&…...

【docker】docker部署nginx
目录 一、步骤二、示例 一、步骤 1.搜索nginx镜像 2.拉取nginx镜像 3.创建容器 4.测试nginx 二、示例 1.搜索nginx镜像 docker search nginx2.拉取nginx镜像 docker pull nginx3.创建容器,设置端口映射、目录映射 # 在root目录下创建nginx目录用于存储nginx数据…...

苍穹外卖-day08
苍穹外卖-day08 本项目学自黑马程序员的《苍穹外卖》项目,是瑞吉外卖的Plus版本 功能更多,更加丰富。 结合资料,和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频:https://www.bilibili.com/video/BV1TP411v7v6/?sp…...

【matlab】机器人工具箱快速上手-动力学仿真(代码直接复制可用)
动力学代码,按需修改参数 各关节力矩-关节变量的关系曲线: %%%%%%%%SCARA机器人仿真模型 l[0.457 0.325]; L(1) Link(d,0,a,l(1),alpha,0,standard,qlim,[-130 130]*pi/180);%连杆1 L(2)Link(d,0,a,l(2),alpha,pi,standard,qlim,[-145 145]*pi/180);%连…...

MySQL高级篇第2章(MySQL的数据目录)
文章目录 1、MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2、数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 小结 1、MySQL8的主要…...
【通过改变压缩视频的分辨率实现高效的视频语义分割】CVPR2022论文精度
Efficient Semantic Segmentation by Altering Resolutions for Compressed Videos Efficient Semantic Segmentation by Altering Resolutions for Compressed VideosBasic Information:论文简要 :背景信息:a. 理论背景:b. 技术路线: 结果:a. 详细的实验设置:b. 详细的实验结果…...
golang 时间工具类
用不习惯也嫌麻烦每次都去操作时间,然后就自己写了个时间工具类 package timeutilimport ("time" )func New() *TimeUtil {return &TimeUtil{} }// TimeUtil 是时间操作工具类 type TimeUtil struct{}// GetFormattedDate 获取格式化的日期字符串 fun…...
剑指 Offer 44.!! 数字序列中某一位的数字
参考资料 剑指 Offer 44. 数字序列中某一位的数字 中等 351 相关企业 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。…...

16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 LLM 进化树升级版!清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …...

Docker Compose 容器编排 + Docker--harbor私有仓库部署与管理
目录 一、Docker Compose简介 1、Docker Compose 的YAML 文件格式及编写注意事项 2、Docker compose 使用的三个步骤 3、 Docker Compose配置常用字段 4、 Docker Compose 常用命令 5、 Docker Compose 文件结构 二: Docker Compose 安装 1、Docker Compose…...
九五从零开始的运维之路(其二十六)
文章目录 前言一、概述1.什么是数据库2.数据库能干什么(一)企业应用(二)金融行业(三)电子商务(四)社交媒体(五)物联网 3.为什么要用数据库,优势、…...

29.Git版本控制工具
1.Git简介 Git是一开源的分布式版本控制系统,提供了存储代码、管理版本历史、分支和合并等功能。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程…...
【算法题】2790. 长度递增组的最大数目
题目: 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组,并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外,还必须满足以下条件: 每个组必须…...
Qt设置开机自启动无法读取配置文件
问题: Qt5.9.4再注册表中加入开机自启动后,每次开机可以启动,但是无法读取配置文件 解决方案 再main()方法中加入QDir::setCurrent(QCoreApplication::applicationDirPath());即可。 static void AutoRunWithSystem(bool bAutoRun) {// 获取…...

解决Font family [‘sans-serif’] not found问题
序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具: WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接,编辑工具是 Visual Studio Code 一、字体…...
C语言进阶-2
1、多文件C语言项目 1.1、简单的C语言程序(项目) 只有一个C文件(a.c),编译的时候gcc a.c -o a,执行的时候./a 1.2、复杂的C语言程序(项目) 是由多个C文件构成的。例如一个项目中包含2个c文件(…...

Zabbix监控之分布式部署
文章目录 Zabbix监控之分布式部署zabbix proxy概述部署zabbix-proxy节点规划基础环境准备安装proxy以及数据库配置数据库添加服务端host解析修改zabbix-proxy配置文件启动代理服务器 zabbix页面(1)在zabbix页面添加代理(2)zabbix-agent连接proxy Zabbix监控之分布式部署 zabbi…...
vue2企业级项目(七)
vue2企业级项目(七) 组件封装 src目录下创建components/index.js const components require.context("./modules", true, /index\.js$/);export default {install: (Vue) > {components.keys().forEach((key) > {let component compo…...

PDPS教程:导出带颜色的JT格式2D布局图文件的另一种方法
目录 概述 布局图平面化与边缘化处理 导出为JT格式文件 JT格式文件查看 概述 在PDPS软件中导入机器人生产线或工作站2D布局图之前,要先将布局图文件转换为JT格式。 使用Crossmanager软件转换出来的2D布局图文件会将图形元素原有的颜色自动修改为黑白颜色&…...
AI面试官:Asp.Net 中使用Log4Net (二)
AI面试官:Asp.Net 中使用Log4Net (二) 当面试涉及到使用log4net日志记录框架的相关问题时,通常会聚焦在如何在.NET或.NET Core应用程序中集成和使用log4net。以下是一些关于log4net的面试题目,以及相应的解答、案例和代码: 文章目…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...