# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

段子手168

1、eureka:高可用的引入

Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署,
Eureka Server 实例会彼此增量地同步信息,从而确保所有节点数据一致。
事实上,节点之间相互注册是 Eureka Server 的默认行为。

2、eurekaServer 高可用:server 间的相互注册

在这里插入图片描述

1)修改 eureka_server 子工程(子模块)中的 application.yml 文件

模拟两个 EurekaServer, 一个端口 9000,一个端口 8000,两个需要相互注册。

## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml# 模拟两个 EurekaServer, 一个端口 9000,一个端口 8000,两个需要相互注册。server:port: 9000  # 启动端口 命令行注入。spring:application:name: service-eureka  #spring应用名, # 注意 FeignClient 不支持名字带下划线eureka: # 配置 eureka_server
#  instance:
#    hostname: localhostclient:
#    register-with-eureka: false  # 是否将自己注册到注册中心,不配置时,默认 true
#    fetch-registry: false  # 是否从 Eureka 中获取注册信息,不配置时,默认 trueservice-url: # 配置暴露给 EurekaClient 的请求地址
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/defaultZone: http://127.0.0.1:8000/eureka/
## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml# 模拟两个 EurekaServer, 一个端口 9000,一个端口 8000,两个需要相互注册。server:port: 8000  # 启动端口 命令行注入。spring:application:name: service-eureka  #spring应用名, # 注意 FeignClient 不支持名字带下划线eureka: # 配置 eureka_server
#  instance:
#    hostname: localhostclient:
#    register-with-eureka: false  # 是否将自己注册到注册中心,不配置时,默认 true
#    fetch-registry: false  # 是否从 Eureka 中获取注册信息,不配置时,默认 trueservice-url: # 配置暴露给 EurekaClient 的请求地址
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/defaultZone: http://127.0.0.1:9000/eureka/

2)打开 idea 的 【Run Dashboard】 运行仪表面板。

复制一个 EurekaServerApplication.java 启动类,命名为:EurekaServerApplication(1)

注意:
如果在 idea 中找不到 【Run Dashboard】 运行仪表面板,可以看如下文章:

# IDEA2019 如何打开 Run Dashboard 运行仪表面板

在这里插入图片描述

3)运行 2个 启动类(urekaServerApplication,urekaServerApplication(1) ),进行测试

浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

浏览器地址栏输入:http://localhost:8000 输出界面如下:

在这里插入图片描述

3、eurekaServer 高可用:服务注册到多个 eurekaserver

1)运行 order_service, product_service 子工程的 启动类,

浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

浏览器地址栏输入:http://localhost:8000 输出界面如下:

在这里插入图片描述

2)修改 product_service 子工程的 application.yml 文件,

添加 注册到多个 eurekaserver 服务 配置。


## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.ymlserver:port: 9001  # 启动端口 命令行注入。
#  port: ${port:56010}  # 启动端口设置为动态传参,如果未传参数,默认端口为 56010
#  servlet:
#    context-path: /application1spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线
#  main:
#    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  # 多个 eurekaserver 用 , 隔开。instance:prefer-ip-address: true  # 使用 ip 地址注册

3)修改 order_service 子工程的 application.yml 文件,

添加 注册到多个 eurekaserver 服务 配置。


## C:\java-test\idea2019\spring_cloud_demo\order_service\src\main\resources\application.ymlserver:port: 9002  # 启动端口 命令行注入。
#  port: ${port:9002}  # 启动端口设置为动态传参,如果未传参数,默认端口为 9002
#  servlet:
#    context-path: /application1spring:application:name: service-order  #spring应用名, # 注意 FeignClient 不支持名字带下划线
#  main:
#    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  # 多个 eurekaserver 用 , 隔开。instance:prefer-ip-address: true  # 使用 ip 地址注册

4)再次运行 order_service, product_service, EurekaServerApplication,EurekaServerApplication(1)

可以宕机 EurekaServerApplication,测试 其他运行是否正常,有无影响。

浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

浏览器地址栏输入:http://localhost:8000 输出界面如下:

在这里插入图片描述

浏览器地址栏输入:http://localhost:9001/product/1 输出界面如下:

在这里插入图片描述

浏览器地址栏输入:http://localhost:9002/order/buy/1 输出界面如下:

在这里插入图片描述

4、eurekaServer 高可用:显示 IP 与服务续约时间设置

1)修改 eureka_service 子工程的 application.yml 文件,

取消配置高可用 EurekaServer 服务。


## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml# 模拟两个 EurekaServer, 一个端口 9000,一个端口 8000,两个需要相互注册。server:port: 9000  # 启动端口 命令行注入。spring:application:name: service-eureka  #spring应用名, # 注意 FeignClient 不支持名字带下划线eureka: # 配置 eureka_server
#  instance:
#    hostname: localhostclient:register-with-eureka: false  # 是否将自己注册到注册中心,不配置时,默认 true。 配置高可用时,须注销此行,或配置为 truefetch-registry: false  # 是否从 Eureka 中获取注册信息,不配置时,默认 true。 配置高可用时,须注销此行,或配置为 trueservice-url: # 配置暴露给 EurekaClient 的请求地址
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/defaultZone: http://127.0.0.1:9000/eureka/  # 配置高可用时,须配置为另一个 EurekaServerApplication 的端口号,如:8000

2)修改 product_service 子工程的 application.yml 文件,

添加 在服务提供者通过 eureka.instance.instance-id 配置,在控制台显示服务 IP 地址。


## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.ymlserver:port: 9001  # 启动端口 命令行注入。
#  port: ${port:56010}  # 启动端口设置为动态传参,如果未传参数,默认端口为 56010
#  servlet:
#    context-path: /application1spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线
#  main:
#    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/
#      defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  # 高可用,注册多个 eurekaserver 用 , 隔开。instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。

3)再次运行 product_service, EurekaServerApplication(1) 测试

浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

4)修改 product_service 子工程的 application.yml 文件,

添加 心跳间隔和续约时间 配置。


## C:\java-test\idea2019\spring_cloud_demo\product_service\src\main\resources\application.ymlserver:port: 9001  # 启动端口 命令行注入。
#  port: ${port:56010}  # 启动端口设置为动态传参,如果未传参数,默认端口为 56010
#  servlet:
#    context-path: /application1spring:application:name: service-product  #spring应用名, # 注意 FeignClient 不支持名字带下划线
#  main:
#    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。datasource:driver-class-name: com.mysql.jdbc.Driver  # mysql 驱动
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 12311jpa:database: MySQLshow-sql: trueopen-in-view: trueeureka:  # 配置 Eurekaclient:service-url:defaultZone: http://localhost:9000/eureka/
#      defaultZone: http://localhost:9000/eureka/,http://localhost:8000/eureka/  # 高可用,注册多个 eurekaserver 用 , 隔开。instance:prefer-ip-address: true  # 使用 ip 地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port}  # 向注册中心注册服务的id(IP 地址)。lease-renewal-interval-in-seconds: 10  # 设置向注册中心每10秒发送一次心跳,告诉注册中心此服务没有岩机,此参数默认是30秒。lease-expiration-duration-in-seconds: 20  # 设置每20秒如果注册中心没收到此服务的心跳,就认为此服务岩机了,此参数默认是90秒。

3)再次运行 product_service, EurekaServerApplication(1) 测试

浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

如果把 product_service 子工程的 启动类停掉,再次刷新网页查看,
只有几十秒,Eureka 上就没有了 product_service 服务。

在这里插入图片描述

5、eurekaServer高可用:自我保护机制

1)EurekaServer 默认是开启 自我保护机制的,这样会在服务的控制台界面显示红色字体,

如下界面:

在这里插入图片描述

2)修改 eureka_service 子工程的 application.yml 文件,

配置 关闭自我保护机制功能 和 剔除服务间隔。


## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml# 模拟两个 EurekaServer, 一个端口 9000,一个端口 8000,两个需要相互注册。server:port: 9000  # 启动端口 命令行注入。spring:application:name: service-eureka  #spring应用名, # 注意 FeignClient 不支持名字带下划线eureka: # 配置 eureka_server
#  instance:
#    hostname: localhostclient:register-with-eureka: false  # 是否将自己注册到注册中心,不配置时,默认 true。 配置高可用时,须注销此行,或配置为 truefetch-registry: false  # 是否从 Eureka 中获取注册信息,不配置时,默认 true。 配置高可用时,须注销此行,或配置为 trueservice-url: # 配置暴露给 EurekaClient 的请求地址
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/defaultZone: http://127.0.0.1:9000/eureka/  # 配置高可用时,须配置为另一个 EurekaServerApplication 的端口号,如:8000server:enable-self-preservation: false  # 关闭自我保护机制eviction-interval-timer-in-ms: 4000  # 设置剔除服务间隔时间为 4000 毫秒(4秒)。此参数默认为 true。

3)浏览器地址栏输入:http://localhost:9000 输出界面如下:

在这里插入图片描述

上一节链接如下:
# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫小案例——汽车之家

本篇文章是使用bs4中的BeautifulSoup和requests解析网页和获取数据👑🌟 文章目录 🌟前言一、🍉bs4中的BeautifulSoup二、🍉bs4的语法三、🍉内容实践1. 确定想要爬取的内容2. 分析网页3. 获取数据分析 &…

JAVA并发编程面试题

作者有话说:目前正在跟新一系列的java面试题,持续不断更新。需要找工作或者不需要找工作的猴子们,都可以关注一下。着急的可以评论区留留言,面试文档以及简历模板。看到了我会发 1. 说说进程和线程的区别 进程 当一个程序在计算机…

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中,Bean是按照作用域来创建的,常见的作用域有两种:Singleton 和 Prototype。Singleton (单例…

Python编程与算法面试-编程面试的重点

在求职面试的过程中,编程能力也是面试官非常看重的一项能力。而对于编程这项能力主要的考察点也有三个维度: 初级:编程的基本功 编程的基本功主要考察的编程语言的基本语法,原理知识,以及一些在编程过程中的常见问题…

深入理解MD5:Message Digest Algorithm 5

title: 深入理解MD5:Message Digest Algorithm 5 date: 2024/4/21 18:10:18 updated: 2024/4/21 18:10:18 tags: MD5哈希函数密码学数据完整性碰撞攻击安全性替代算法 导论 MD5的背景和历史 MD5(Message Digest Algorithm 5)是一种广泛使用…

一堆喷儿香喷儿香的工具网站-已经收藏-搜嗖工具箱!

文心一言 https://yiyan.baidu.com/ ​ ChatGpt横空出世的横空出世好像一把钥匙,开启了大模型时代,国内也有不错的产品,比如百度的文心一言,从3.5到4.0看得见的成长,现在的文心一言是我们工作中不可缺少的好帮手&am…

javaEE初阶——多线程(五)

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享关于多线程的文章第五篇关于 多线程代码案例二 阻塞队列 如果有不足的或者错误的请您指出! 目录 2.阻塞队列2.1常见队列2.2 生产者消费者模型有利于进行解耦合程序进行削峰填谷…

走近网络安全公司:F5探索应用安全至简之道

伴随企业加速数字化转型工作、扩展到新的基础设施环境并采用微服务架构,企业正在拥抱混合和多云基础设施所带来的灵活性。现在跨越四种环境部署应用的企业,其平均需要管理和保护的应用数据路径比应用仅限本地部署时多10倍,复杂性呈指数级增加…

2024数学建模时间汇总与竞赛攻略

目录 2024数学建模汇总(时间、报名费、获奖率、竞赛级别、是否可跨校) 中国高校大数据挑战赛 “华数杯”国际大学生数学建模竞赛 美国大学生数学建模竞赛(美赛) 数学中国(认证杯)数学建模网络挑战赛 …

盲盒一番赏小程序:打开未知的惊喜之旅

在快节奏的生活中,人们总是渴望寻找一份属于自己的小确幸。盲盒一番赏小程序,正是这样一个为你带来无尽惊喜与乐趣的平台。我们精心打造这一小程序,让每一次点击都成为一次全新的探索,让每一次选择都充满无限可能。 盲盒一番赏小…

JavaWeb--05Vue项目简介

Vue项目简介 1 创建vue项目2 Vue项目目录结构3 运行Vue项目3 Vue项目开发流程 1 创建vue项目 环境准备好了,接下来我们需要通过Vue-cli创建一个vue项目,然后再学习一下vue项目的目录结构。Vue-cli提供了如下2种方式创建vue项目: 命令行:直接…

用Cmake编译程序时,链接到FFmpeg库

用Cmake编译程序时,链接到FFmpeg库 一、前言 可喜可贺,折腾了一晚上终于把这个勾八链接成功了,已经要吐了。看到下面控制台的输出,吾心甚慰呀😭 [100%] Linking CXX executable rknn_yolov5_demo [100%] Built targe…

SpringBoot 操作 Redis

导入对应版本的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>修改配置文件中的信息 spring:redis:host: 127.0.0.1port: 8888注意: 我这里 xsh…

【python】深度解剖!一文搞懂字符串常用功能

【python】深度解剖!一文搞懂字符串常用功能 【先赞后看养成习惯】求点赞+关注+收藏😀 目录 【python】深度解剖!一文搞懂字符串常用功能字符串的创建:字符串的格式化——占位符.format方法字符串的分割字符串的连接字符串的重复字符串的大小写转换字符串的判断字符串的…

sherpa + ncnn 离线语音识别

目录结构 前言音视频格式转为wavsherpa-ncnn编译LinuxWindowswindows编译中遇到的问题问题“nmake -? failed with: no such file or directory”编译失败原因 成功编译截图 可执行程序说明模型下载语言识别测试LinuxWindows 参考文献 前言 小编需要实现离线音视频语言部分识…

C++ 程序的内存分配

C 程序的内存分配 C 程序的内存分配栈堆数据区程序代码区参考 C 程序的内存分配 一个 C 编译的程序占用内存分为以下几个部分&#xff08;从高地址到低地址&#xff09;&#xff1a; 内核空间&#xff1a;由操作系统创建并控制&#xff0c;用户代码不能读写。栈&#xff1a;由…

mysql 日环比 统计

接到一个任务&#xff0c;要计算日环比的情况。 16、查询销售额日环比情况 日环比&#xff1a; &#xff08;今日-昨日&#xff09;/ 昨日 的一个比率情况。 1&#xff0c;建表 DROP TABLE IF EXISTS sale; create table sale(id int not null AUTO_INCREMENT,record_date da…

IDEA插件:CodeGeex

前言 CodeGeeX是由清华大学和智谱AI联合开发的多语言代码生成模型。CodeGeeX是一款AI编程助手&#xff0c;其功能类似于Github Copilot、Codeium、CodeWhisperer、Bito等智能编程助手。CodeGeeX支持Python、C、Java、JavaScript、Go等10多种主流编程语言。它可以帮助程…

windows驱动开发-WDM框架(一)

在前面的文章中解释过&#xff0c;NT5.0之后windows确定了新的架构Windows Driver Model (WDM)&#xff0c;在Vista之后又推出了Windows Driver Framework(WDF)&#xff0c;这两个都属于驱动程序框架&#xff0c;那么它们的之间的关系是怎样的&#xff1f; WDF是对WDM进行的封…

利用大语言模型,矢量数据库实现数据库的智能搜索

目的 数据库使用SQL 语言查询数据&#xff0c;数据库的记录中要有一个关键字段&#xff08;通常称为主键字段&#xff0c;它的值在数据库列表中是唯一的&#xff09;,数据记录是结构化的. 如果你需要根据数据记录的内容来查询数据记录&#xff0c;就需要通过Select 语句在数据库…