手把手教你搭建SpringCloud项目(八)集成Ribbon负载均衡器

什么是微服务?一看就会系列!

一、手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作

二、手把手教你搭建SpringCloud项目(二)生产者与消费者

三、手把手教你搭建SpringCloud项目(三)集成Eureka服务注册中心

四、手把手教你搭建SpringCloud项目(四)Eureka集群版搭建

五、手把手教你搭建SpringCloud项目(五)生产者集群版搭建

六、手把手教你搭建SpringCloud项目(六)Eureka实现服务发现

七、手把手教你搭建SpringCloud项目(七)集成Consul服务注册中心

八、手把手教你搭建SpringCloud项目(八)集成Ribbon负载均衡器

九、手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

十、手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级

十一、手把手教你搭建SpringCloud项目(十一)集成Hystrix之服务熔断

十二、手把手教你搭建SpringCloud项目(十二 )集成Hystrix之图形化Dashboard实时监控

十三、手把手教你搭建SpringCloud项目(十三 )集成Gateway新一代网关

十四、手把手教你搭建SpringCloud项目(十四 )集成Config分布式配置中心

十五、手把手教你搭建SpringCloud项目(十五)集成Bus消息总线

十六、手把手教你搭建SpringCloud项目(十六)集成Stream消息驱动

十七、手把手教你搭建SpringCloud项目(十七)集成Sleuth分布式链路跟踪

继续更新中,欢迎点赞关注!

一、Ribbon的简介

Ribbon是Neflix发布的开源项目,后由Spring Cloud开发团队封装于Spring Cloud中,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。功能是提供客户端的软件负载均衡算法和服务调用。Ribbon是一个基于HTTP和CP的客户端负载均衡工具,Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。Ribbon客户端提供一系列的完善的配置项,如连接超时,重试等。简单的说,就是配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机等)去连接这些机器。我们很容器使用Ribbon实现自定义负载均衡算法。

什么是Load Balancer?

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。常见的负载均衡的软件有:Nginx,LVS,硬件F5等。

Ribbon本地负载均衡与Nginx服务端负载均衡的区别?

Nginx是服务器的负载均衡,客户端所有的请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
Ribbon本地负载均衡,在调用服务接口的时候,会在注册中心上获取注册信息服务列表之后缓冲到JVM本地,从而在本地实现RPC远程服务调用技术。

LB负载均衡分为哪两种?

集中式LB,即在服务的消费方和提供方之间是有独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方。

进程内LB,将LB逻辑集成于消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个 合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

前边的文章,我们实现了消费者访问生产者集群轮询赋值均衡,具体的请点击查看。Ribbon就是实现服务端的负载均衡加RestTemplate的调用。是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。

二、代码实例

由于spring-cloud-starter-netflix-eureka-client自带了spring-cloud-starter-ribbon引用,所以就不用引入ribbon的包了,如下图:

在这里插入图片描述

Ribbon的架构图,如下:

在这里插入图片描述

Ribbon在工作时分为两步:

第一步先选择EurekaServer,它优先选择在同一个区域内负载较少的Server。
第二步再根据用户指定的策略,在从Server取到服务注册列表中选择一个地址。
其中ribbon提供了多种策略,比如轮询、随机、根据时间响应时间加权等。

Ribbon的核心组件IRule

IRule算法的结图:
在这里插入图片描述

IRule的七大负载算法

在这里插入图片描述

更改负载算法,由我们的轮询算方法换为随机算法,需要自定义一个配置类,注意:这个自定义类不能放在@ComponentScan所扫描的当前包下以及包下,否则我们自定义的这个配置类会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。如下图:

在这里插入图片描述

新建MyselfRule配置类,变为随机,如下图:

package com.buba.springclould.myrule;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//自定义负载均衡路由规则类
@Configuration
public class MyselfRule {@Beanpublic IRule myRule() {// 定义为随机return new RoundRobinRule();}   
}

在 主启动类上加@RibbonClient注解并进行配置,如下图:

package com.buba.springclould.order;import com.buba.springclould.myrule.MyselfRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;@SpringBootApplication
@EnableEurekaClient
//name为生产者服务的服务名称  configuration为配置类的类名
@RibbonClient(name = "mcroservice-payment",configuration = MyselfRule.class)
public class OrderMain {public static void main(String[] args) {SpringApplication.run(OrderMain.class,args);}
}

那现在启动eureka7001和7002,然后启动服务端服务8001与8002,启动生产者服务80,访问路径http://localhost/consumer/payment/get/1,由原先的轮询8001服务与8002服务来回切换,变为了8001服务与8002服务随机访问。

Ribbon负载均衡原理:

在这里插入图片描述

简单集成Ribbon的负载算法就就完成啦。so easy!
在这里插入图片描述

下一篇文章学习OpenFeign服务接口调用,持续关注、点赞。我们持续更新中。

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

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

相关文章

【数据结构】24王道考研笔记——图

六、图 目录 六、图定义及基本术语图的定义有向图以及无向图简单图以及多重图度顶点-顶点间关系连通图、强连通图子图连通分量强连通分量生成树生成森林边的权、带权网/图特殊形态的图 图的存储及基本操作邻接矩阵邻接表法十字链表邻接多重表分析对比图的基本操作 图的遍历广度…

区块链学习一:安装 Geth

区块链技术正在迅速发展,并在各个领域展现出巨大的潜力。如果您对区块链开发感兴趣,那么学习如何安装和配置以太坊客户端 Geth 是一个很好的起点。在本篇文章中,我们将介绍如何使用 DockerHub 上的 Geth Docker 映像来快速安装和运行 Geth 节…

vue学习笔记(一)

1.编辑器选择 是用vscode 和 webstrom 个人感觉 vscode的插件比较多,对vue3的支持比较好 webstorm的自动保存比较好 各有优劣吧 我学习的这个项目目前采用vscode 2.vue2 还是 vue3 框架学通了都是通用的,这个时间点来学肯定是学vue3 只是顾虑到团…

JavaScript XHR、Fetch

1 前端数据请求方式 2 Http协议的解析 3 XHR的基本用法 4 XHR的进阶和封装 5 Fetch的使用详解 6 前端文件上传流程 早期的页面都是后端做好,浏览器直接拿到页面展示的,用到的是jsp、asp、php等等的语言。 这个叫做服务器端渲染SSR。 这里后端向前端…

金融数据库的战场,太平洋保险和OceanBase打了场胜仗

点击关注 文丨刘雨琦 “数据库的国产替代,必须经过严格的考虑,保证不会出错,所以大多数企业的领导层选择按兵不动或者简单扩容。因为不换就不会错,选了很久如果选错,还可能会出现重大事故。” 某银行数据库技术人员…

Go语言之函数补充defer语句,递归函数,章节练习

defer语句是go语言提供的一种用于注册延迟调用的机制,是go语言中一种很有用的特性。 defer语句注册了一个函数调用,这个调用会延迟到defer语句所在的函数执行完毕后执行,所谓执行完毕是指该函数执行了return语句、函数体已执行完最后一条语句…

语音识别开源框架 openAI-whisper

Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型,也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…

数据结构问答3

1. 栈、队列、线性表的区别与联系(异同) 答: 栈和队列联系:逻辑结构都是线性结构;存储结构都可以采用顺序存储结构和链式存储结构;他们的数据元素都呈线性关系,是一种的线性表,且只允许在端点处插入和删除元素 栈、队列和线性表联系:栈和队列都是一种操作受限的线性…

netty组件详解-上

netty服务端示例: private void doStart() throws InterruptedException {System.out.println("netty服务已启动");// 线程组EventLoopGroup group new NioEventLoopGroup();try {// 创建服务器端引导类ServerBootstrap server new ServerBootstrap();// 初始化服…

【嵌入式开发 Linux 常用命令系列 6 -- 字符提取 cut 命令使用】

文章目录 Cut 命令和语法指定分隔符以字符的方式提取内容根据字节提取字符 上篇文章:嵌入式开发 Linux 常用命令系列 5 – history 与 “!“ 巧妙配合 Cut 命令和语法 cut 命令的基本语法如下: $ cut OPTION... [FILE]...cut 的一些选项如…

苹果APP安装包ipa如何安装在手机上

苹果APP安装包ipa如何安装在手机上 苹果APP的安装比安卓复杂且困难,很多人不知道如何将ipa文件安装到手机上。以下是几种苹果APP安装在iOS设备的方式,供大家参考。 一、上架App Store 这是最正规的方式。虽然审核过程复杂、时间较长,且审核…

数据可视化组件有什么用?

数据可视化组件在数据分析中扮演着至关重要&角色。 通过图表、图形和交互式界面,数据可视化组件帮助将复杂的数据转化为易于理解的视觉展示。这种形式的数据呈现有助于发现模式、趋势和异常,并能够快速有效地传达数据的含义和洞察。 下面简单举两个…

不使用插件预览pdf等类型文件

前端使用window.open即可 var url"file/preview.do?path"response.path"&fileName"response.name; top.window.open(url,response.name,"_blank"); 接口代码如下 RequestMapping(value "/file/preview.do")public ResponseBod…

使用Visual Studio打造强大的程序,从添加第三方库开始

使用Visual Studio打造强大的程序,从添加第三方库开始 博主简介一、引言二、理解第三方库三、下载和安装第三方库四、示例代码和演示五、总结 博主简介 💡一个热爱分享高性能服务器后台开发知识的博主,目标是通过理论与代码实践的结合&#x…

【数字IC前端笔试真题精刷(2020)】大疆——数字芯片开发工程师B卷

声明:本专栏所收集的数字IC笔试题目均来源于互联网,仅供学习交流使用。如有侵犯您的知识产权,请及时与博主联系,博主将会立即删除相关内容。 笔试时间:2020年B卷 题目类型: 单选题(20 x 2’ = 40’)多选题(10 x 2’ = 20’)填空题(3’ x 5 = 15’)问答题(5’ x 5 …

【状态估计】基于FOMIAUKF、分数阶模块、模型估计、多新息系数的电池SOC估计研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

在 Linux 系统上安装Docker Compose

在Linux系统上安装Docker Compose需要以下步骤: 首先,确保已经安装了Docker。如果没有安装,请按照Docker官方文档进行安装。 打开终端或命令行界面,并使用以下命令下载Docker Compose二进制文件: sudo curl -L &quo…

SpringBoot项目中MVC使用--【JSB系列之010】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录Http协议是马冬梅Cookie机制Session机制Token MVC模型本章的专注内容UserController代码 ThymeleafLets GO!总结作业配套资源题外话 Http协议是马冬梅 HTTP简介 1. HTTP…

润和软件与华秋达成生态共创合作,共同推动物联网硬件创新

7月11日,在2023慕尼黑上海电子展现场,江苏润开鸿数字科技有限公司(以下简称“润开鸿”)与深圳华秋电子有限公司(以下简称“华秋”)签署了生态共创战略合作协议,共同推动物联网硬件生态繁荣发展。当前双方主要基于润开鸿的硬件产品及解决方案开…

完整的电商平台后端API开发总结

对于开发一个Web项目来说,无论是电商还是其他品类的项目,注册与登录模块都是必不可少的;注册登录功能也是我们在日常生活中最长接触的,对于这个业务场景的需求与逻辑大概是没有什么需要详细介绍的,市面上常见的邮箱注册…