当前位置: 首页 > news >正文

[SpringCloud] Eureka 与 Ribbon 简介

目录

一、服务拆分

1、案例一:多端口微服务

2、案例二:服务远程调用

二、Eureka

1、Eureka 原理分析

2、Eureka 服务搭建(注册 eureka 服务)

3、Eureka 服务注册(注册其他服务)

4、Eureka 服务发现(服务拉取)

三、Ribbon 负载均衡 

1、负载均衡原理

2、负载均衡策略

3、饥饿加载


一、服务拆分

通过 2 个案例,学习如何实现服务拆分。

  • 都需要引入 web 的起步依赖:

1、案例一:多端口微服务

需求:

  • 将 Order 和 User 模块的服务进行拆分,通过不同的 URL 进行服务调用。

(1)项目结构

  • 为 2 个模块都添加上各自的 Controller;

(2)编写 Controller

  • 写一个简单的 Controller,在页面上显示字符串即可;
  • UserController 类似;

(3)设置不同的端口,启动 application

  • 为两个模块设置不同的服务器端口(user 设置 8081、order 设置 8080);

  • 将 Order 模块和 User 模块的 Application 都启动起来;

  • 访问页面 /user/query 和 /order/query

2、案例二:服务远程调用

需求:

  • 在 Order 的实体类中包含了 User 类型的属性,当根据订单号获取订单信息时,由于 Order 和 User 的数据库访问也是独立的,导致 User 属性为 null。
  • 因此在 Order 模块中需要调用 User 模块的查询 user 的功能来获取 User 信息,再赋值给 Order。

(1)项目结构

  • 两个模块都需要创建对应的实体类;
  • Order 还需要创建 service 和 mapper;

(2)OrderController 和 UserController

  • 两个模块的 Controller 都需要添加相应的方法;

(3)OrderMapper 

  • 为了简单起见,这里不引入连接数据库操作;
  • 直接在 mapper 中实现返回一个 User 的方法;

(4)OrderSrevice

OrderSrevice 需要两个属性:OrderMapper 和 RestTemplate;

其中 RestTemplate 就是帮助我们实现远程服务调用的关键;

  • url 属性:表示发送的请求;
  • responseType 属性:表示返回的数据类型(默认是 JSON);
  • getForObject() 方法:表示发送 get 请求;
  • postForObject() 方法:表示发送 post 请求;

(5)启动两个模块的 application

  • 访问 /order/queryForOrderById/xxx;

二、Eureka

1、Eureka 原理分析

观看下面视频:

08-Eureka-eureka原理分析_哔哩哔哩_bilibili

2、Eureka 服务搭建(注册 eureka 服务)

(1)创建 eureka 服务模块(eureka 为子工程)

  • 子工程的 pom 文件中引入依赖;

  • 父工程的 pom 文件做好依赖管理;

(2)编写 application 配置文件,注册 eureka

  • 设置服务端口;
  • 设置 eureka 服务名称;
  • 设置 eureka 服务地址;

为什么 eureka 自身的服务地址信息也是 client?

  • eureka 也是一个微服务,所以 eureka 启动的时候,会将自己也注册到 eureka 上。
  • 这是为了 eureka 之间的集群通信,当有多个 eureka 时,defaultZone 就需要写上多个 URL。

(3)启动 application,访问 eureka

  • 为启动类添加 @EnableEurekaServer 注解;

  • 访问 localhost:10086/eureka,则会跳转到 eureka 的管理界面;

  • instances 表示注册到 eureka 的服务示例(服务列表);

3、Eureka 服务注册(注册其他服务)

(1)引入依赖

  • 分别在 Order 模块和 User 模块的 pom 文件中,都添加上如下依赖;
  • 注意:使用的是客户端 client 的依赖;

(2)编写 eureka 地址信息

这一步骤跟前面的是一样的。

  • 设置服务端口;
  • 设置 eureka 服务名称;
  • 设置 eureka 服务地址;

(3)将 User 和 Order 的 application 都启动

  • 在 Service 中添加 SpringBoot 服务,即可一次性启动;

  • 访问 /localhost:10086,来到 eureka 管理页面;
  • 此时已经可以看到服务列表已经有 3 个服务了;

(4)多实例部署

如果我们想要 User 有多个服务实例可以添加到服务列表上,可以复制多几份 User 的运行配置。

  • 选中要复制的运行配置,点击复制;

  • 在 VM Option 中,添加参数 server.port = 一个没用过的端口;

  • 启动 5 个 application,观察服务列表;

  •  可以发现,Order 和 User 各多了 1 个服务;

4、Eureka 服务发现(服务拉取)

服务发现就是服务拉取。

服务拉取是基于服务名称获取服务列表(比如获取 UserService 的服务列表,内含 2 个服务),然后在对服务列表做负载均衡

基于前面“服务拆分”的“案例二:服务远程调用”,我们来学习服务拉取。

(1)获取服务列表

  • 修改 OrderService 中的代码,用服务名代替 ip:port
  • (既然需要负载均衡,因此肯定无法指定 ip:port,所以使用服务名代替)

(2)添加负载均衡注解 @LoadBalanced

  • 在 order-service 项目的启动类 OrderApplication 中的 RestTemplate 添加负载均衡注解:

(3)启动 application,查询 Order

  • 启动下面 5 个 application;
  • 然后我们选择使用 8080 端口的 Order 来获取信息(也可以用 8083 的);

  • 发送 4 次获取 Order 信息的请求,id 从 1~ 4;

  • 观察 2 个 User 启动类的输出,都输出了 2 次信息;
  • 说明对 user-service 服务列表做到了负载均衡;

三、Ribbon 负载均衡 

Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡的工具。

它可以在客户端的 application 配置文件中,配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟 http 请求,但是步骤比较繁琐。

1、负载均衡原理

2、负载均衡策略

Ribbon 的负载均衡规则是一个叫做 IRule 的接口来定义的,每一个子接口都是一种规则。

(1)Java 可以使用的负载均衡规则

(2)负载均衡规则修改方法

默认情况下,使用的是 ZoneAvoidanceRule。

需要注意的是:

  • 第一种方式,可以对所有 order-service 模块访问的服务列表做到负载均衡;(大)
  • 第二种方式,只能对配置文件中指定的 service 做到负载均衡;(小)

3、饥饿加载

Ribbon 默认是采用懒加载,即第一次访问时才会去创建 LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

  • enabled = true,表示开启饥饿加载;
  • clients = user-service,表示指定对 user-service 这个服务饥饿加载;
  • clients 其实是数组形式,可以协商多个服务;

相关文章:

[SpringCloud] Eureka 与 Ribbon 简介

目录 一、服务拆分 1、案例一:多端口微服务 2、案例二:服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建(注册 eureka 服务) 3、Eureka 服务注册(注册其他服务) 4、Eureka 服务发现…...

【Python 零基础入门】常用内置函数 再探

【Python 零基础入门】内容补充 1 常用内置函数 Python 简介为什么要学习内置函数集合操作len(): 计算长度sorted(): 排序all(): 检查所有元素any(): 检查任一元素filter(): 过滤元素map(): 应用函数zip(): 组合元素 文件操作和输入输出open(): 打开文件read(): 读取文件write(…...

10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节

课上 一些结论,性质 n0,n1,n2指的是子结点的数量,n0没有子节点,叶子结点 n2*n2n11,若n1为奇数,则n为偶数,不然,则为奇数 满二叉树 没有度为1的结点,即每个结点要么没有孩子结点,要么…...

亮氨酸脯氨酸肽——一种新型的医药中间体研究肽

亮氨酸脯氨酸医药中间体肽是一种合成(人造)激素,类似于大脑中产生的天然激素。它用于治疗许多医疗问题,包括: 子宫平滑肌瘤(子宫肌瘤)出血引起的贫血,或晚期或晚期前列腺癌症&#…...

Ubuntu 22.04 开机闪logo后卡在/dev/sda3: clean

环境 Vmware 17.0.0,CPU 2,内存4G,硬盘50G Ubuntu 22.04 问题描述 开机 --> 显示两行代码 --> 显示ubuntu logo --> 左上显示两个代码卡住不动 原因分析 1、网上大多说显卡驱动,最近没安装相关软件,也没…...

avue-crud 自定义列

基本设置: option: {columnBtn: false,refreshBtn: false,addBtn: false,delBtn: false,editBtn: false,viewBtn: false,searchShowBtn: false,height: auto,maxHeight: auto,calcHeight: 70,searchLabelWidth: 58,tip: false,searchShow: false,searchMenuSpan: 6…...

达索系统SOLIDWORKS 2024 装配体新增功能

如今市场环境紧迫,许多企业在这样的情形之下,都需要尽快将产品推向市场,赢得头筹。所以产品设计需要快速进行装配验证,以确保产品功能和性能的准确性和可靠性,同时原型或样机的制造和装配需要尽快完成,以满…...

电脑入门:电脑专业英语500词,供新手参考

1. file n. 文件;v. 保存文件 2. command n. 命令,指令 3. use v. 使用,用途 4. program n. 程序 5. line n. (数据,程序)行,线路 6. if conj. 如果 7. display vt. 显示,显示器 8. set v. 设置,n. 集合 9. key n. 键,关键字,关键码 10. list n. 列表,显示,…...

采购管理工具-采购软件-Leangoo免费看板工具

我们可以按照公司的实际情况定制采购流程。 1、在Leangoo免费看板工具中创建一个项目,项目类型建议选择“轻量级协作”,项目模版建议选择“人事与行政” 系统会自动为您创建四个看板,如下图: 图1 2、在项目内创建一个 “办公室采…...

【23真题】大神凭这套拿452分!看看你能拿多少?

今天分享的是23年福州大学866的信号与系统试题及解析。23年福州大学新一代电子信息的最高分是452分!但是我看不到单科分数。按照75,75,150,150。也就是只有450,说明这个同学,专业课和数学几乎拿满&#xff…...

大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)

告警解释 HA软件周期性检测Manager的WebService浮动IP地址和数据库。当HA软件检测到浮动IP地址或数据库异常时,产生该告警。 当HA检测到浮动IP地址或数据库正常后,告警恢复。 告警属性 告警参数 对系统的影响 如果Manager的WebService浮动IP地址异常…...

CSS基础入门04

目录 1.内边距 1.1基础写法 1.2复合写法 2.外边距 2.1基础写法 2.2复合写法 2.3块级元素水平居中 3.去除浏览器默认样式 4.弹性布局 4.1初体验 5.flex 布局基本概念 6.常用属性 6.1justify-content 6.2align-items 1.内边距 padding 设置内容和边框之间的距离. …...

LeetCode2741.特别的排列 状压

暴力枚举的话是n&#xff01; 考虑状压DP&#xff0c;其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了 这里有常用技巧&#xff1a; 全集&#xff08;1<<n&#xff09;-1 增加某个元素 x | (1<<i) 删除某个元素 x & ~(1<<i) const i…...

【Linux】Centos 8 服务器部署:阿里云域名注册、域名解析、个人网站 ICP 备案详细教程

目录 一、背景信息 二、操作步骤 &#xff08;1&#xff09;查询域名 &#xff08;2&#xff09;加入域名清单 &#xff08;3&#xff09;确认订单信息 &#xff08;4&#xff09;支付 &#xff08;5&#xff09;等待域名实名认证通过 三、域名注册成功 四、查看域名…...

Sass、Less和Stylus之间有什么主要的区别?

Sass、Less和Stylus是三种常见的CSS预处理器&#xff0c;它们在功能和语法上有一些区别。以下是它们之间的主要区别&#xff1a; 1&#xff1a;语法差异&#xff1a; Sass使用缩进的语法&#xff0c;使用类似于Python的缩进来表示嵌套规则和块级作用域。Less和Stylus使用类似…...

第八章 软件测试自动化

一、学习目的与要求 通过本章的学习&#xff0c;了解自动化测试应考虑的各种因素及如何衡量自动化测试成本&#xff0c;掌握自动化测试和手工测试的优缺点&#xff0c;能正确选择软件测试策略&#xff0c;了解测试工 具的分类和使用目的&#xff0c;熟悉常用的测试工具&#xf…...

科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命

回顾国内第三方输入法赛道近十余年的发展&#xff0c;移动互联网的市场红利催生了科大讯飞、百度、搜狗等颇具规模和实力的头部厂商。与此同时&#xff0c;历经多年、多方角逐&#xff0c;第三方输入法市场进入存量阶段&#xff0c;升级技术、优化用户体验来挖掘存量&#xff0…...

OV-VG: A Benchmark for Open-Vocabulary Visual Grounding

OV-VG: A Benchmark for Open-Vocabulary Visual Grounding 一、Abstract 写在前面 又是一周周末&#xff0c;光调代码去了&#xff0c;都没时间看论文了&#xff0c;汗。   这是一篇关于开放词汇定位的文章&#xff0c;也是近两年的新坑&#xff0c;但是资源也是需要不少。 …...

win10 javaweb 项目8080端口被占用

文章目录 前言出现场景&#xff1a;解决思路&#xff1a; 前言 提示&#xff1a;生活该走向何处&#xff1f;也许你还不知道答案&#xff0c;但是你一定是答案的一部分。 出现场景&#xff1a; 解决思路&#xff1a; 找到运行的进程直接干掉 打开命令窗口&#xff08;win r…...

C语言每日一题(22)合并两个有序数组

力扣网 88. 合并两个有序数组 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...