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的面试题目,以及相应的解答、案例和代码: 文章目…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
