Ribbon快速入门

news2024/11/26 4:43:21

1.Ribbon 概述

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。 轮询 hash 权重 …

简单的说 Ribbon 就是 netfix 公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon 客户端组件提供了一套完善的配置项,比如连接超时,重试等。

在 Spring Cloud 构建的微服务系统中, Ribbon 作为服务消费者的负载均衡器,有两种使用方式,一种是和 RestTemplate 相结合,另一种是和 OpenFeign 相结合。OpenFeign 已经默认集成了 Ribbon,关于 OpenFeign 的内容将会在下一章进行详细讲解。Ribbon 有很多子模块,但很多模块没有用于生产环境!

/**
* 测试发送 get 请求

*/

@Test

void testGet() {

RestTemplate restTemplate = new RestTemplate();

String url = "http://localhost:8080/testGet?name=cxs";

ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);

System.out.println(result.getStatusCodeValue());
}

/**
* 测试发送 post 表单参数

*/

@Test

void testPost() {
RestTemplate restTemplate = new RestTemplate();

String url = "http://localhost:8080/testPost";

LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();

map.add("name", "cxs");

map.add("age", "18");

ResponseEntity<String> result = restTemplate.postForEntity(url, map, String.class);

System.out.println(result.getStatusCodeValue());
}

/**
* 测试发送 post JSON 参数

*/

@Test

void testPost2() {

RestTemplate restTemplate = new RestTemplate();

String url = "http://localhost:8080/testPost2";

User user = new User();

user.setName("cxs");

user.setAge(18);

user.setHobby("编码");

ResponseEntity<String> result = restTemplate.postForEntity(url, user, String.class);

System.out.println(result.getStatusCodeValue());
}

2.负载均衡

负载均衡,英文名称为 Load Balance(LB)http:// lb://(负载均衡协议) ,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如 Web 服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

2.1 服务器的负载均衡

Nginx,F5
在这里插入图片描述

3.Ribbon 快速入门

3.1 本次调用设计图

在这里插入图片描述

3.2 项目搭建

consumer 和 provider-1 和 provider-2 都是 eureka-client

注意这三个依赖是 eureka-client

注意 provider-1 和 provider-2 的 spring.application.name=provider

注意启动类的注解和配置文件的端口以及服务名称

3.3 创建 provider-1 和 provider-2

在这里插入图片描述

3.4 编写 provider-1 和 provider-2

在这里插入图片描述

在这里插入图片描述

3.5 创建 consumer

在这里插入图片描述

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.9.RELEASE</version>
</dependency

3.6 编写 consumer

@RestController

public class TestController {

@Autowired

private RestTemplate restTemplate;

@Autowired

private DiscoveryClient discoveryClient;

static Random random = new Random();

@RequestMapping("/testBalance")

public String testBalance(String serviceId) {

//获取服务列表

List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);

if (ObjectUtils.isEmpty(instances)) {

return "服务列表为空";
}

//如果服务列表不为空,先自己做一个负载均衡

ServiceInstance serviceInstance = loadBalance(instances);

String host = serviceInstance.getHost();

int port = serviceInstance.getPort();

String url = "http://" + host + ":" + port + "/info";

System.out.println("本次我调用的是" + url);

String forObject = restTemplate.getForObject(url, String.class);

System.out.println(forObject);

return forObject;
}

private ServiceInstance loadBalance(List<ServiceInstance> instances) {

//拼接 url 去调用 ip:port 先自己实现不用 ribbon

ServiceInstance serviceInstance =
instances.get(random.nextInt(instances.size()));

return serviceInstance;
}
}

3.9 使用 Ribbon 改造

只需要对 consumer 改造即可,改造启动类

改造 controller

**
* 用来发请求的

*
* @return
*/

@Bean
@LoadBalanced //ribbon 的负载均衡注解

public RestTemplate restTemplate() {

return new RestTemplate();
}
/**
* 测试 ribbon 的负载均衡

*
* @param serviceId

* @return
*/

@RequestMapping("/testRibbonBalance")

public String testRibbonBalance(String serviceId) {

//直接用服务名称替换 ip:port

String url = "http://" + serviceId + "/info";

String forObject = restTemplate.getForObject(url,String.class);

System.out.println(forObject);

return forObject;
}

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

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

相关文章

机器视觉-镜头、相机、光源选型以及打光

机器视觉-镜头、相机、光源选型以及打光从理论到实战 关注林中青木微信公众号&#xff0c;获取更多干货&#xff0c;大佬带你飞~

海睿思分享 | ChatGPT梦幻联动,解锁企业数字化转型新可能

在当今这个充满活力和变化的世界里&#xff0c;人工智能 (AI) 的迅速发展正在改变着我们的生活方式。它不仅提高了我们的工作效率&#xff0c;而且正在重新定义我们的日常生活&#xff0c;以前所未有的方式提高了我们的生活质量。其中&#xff0c;以ChatGPT为代表的语言生成模型…

Golang的数据类型及数据类型间转换整理

Golang 更明确的数字类型命名&#xff0c;支持 Unicode&#xff0c;支持常用数据结构。 Go 语言中数据类型分为&#xff1a; 基本数据类型 和 复合数据类型 基本数据类型有&#xff1a;整型、浮点型、布尔型、字符串 复合数据类型有&#xff1a; 数组、切片、结构体、函数、m…

【QT】——定时器QTimer的使用

目录 常见的函数 构造函数 获取/设置定时器间隔时间 启动/停止定时器 信号 设置定时器的时间的两种方法 设置定时器精度 其他函数 静态函数 实例 QTimer是QT框架中的定时器类型&#xff0c;它的使用方法如下&#xff1a; 定义一个调用QTimer对象&#xff0c;调用st…

华为OD机试真题 Python 实现【找出通过车辆最多颜色】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假如车辆的颜色只有3种&#xff0c;找出n秒内经过的最多颜色的车辆数量。 三种颜色编…

深度学习在Li电池RUL、SOH和电池热管理中的研究进展与应用

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 大家好&#xff0c;我是Peter~ 今天给大家分享一篇关于深度学习在Li电池RUL、SOH和电池热管理中的研究进展与应用的文献综述。文献基本信息介绍&#xff1a; 本文系统介绍了Deep Learning深度学习的不同…

大厂题第1辑——虚函数七题精讲之3:纯虚函数

什么是纯虚函数&#xff1f;什么是抽象类&#xff1f;纯虚函数可以提供实现吗&#xff1f;有什么意义&#xff1f; 题6-什么是纯虚函数&#xff1f; C中有两种继承&#xff1a;接口继承和实现继承。二者的第一个区别是&#xff1a;基类都干了些什么&#xff1f; 如果基类啥实…

15.2 BP神经网络实现图像压缩——基于BP神经网络的图像压缩(matlab程序)

1.简述 BP神经网络的图像压缩原理 数字图像压缩实际上是以较少的比特数有损或者无损的来表示原来像素矩阵的一种图像处理技术,实际上就是减少图像数据中的时间冗余,空间冗余,频谱冗余等等作为目的,从而同过减少上述的一种或者多种冗余的信息而达到更加高效的存储与传输数据.图…

目标检测的评估指标

Precision(精确率/查准率)&#xff1a;是指在所有被预测为正的样本中&#xff0c;确实是正样本的占比。当Precision越大时&#xff0c;FP越小&#xff0c;此时将其他类别预测为本类别的个数也就越少&#xff0c;可以理解为预测出的正例纯度越高。Precision越高&#xff0c;误检…

LLM驱动的智能体#Mixcopilot的迭代演进

论文&#xff1a; Generative Agents: Interactive Simulacra of Human Behavior shadow 前阵子在一场线下活动&#xff0c;我们展开了对生成式智能体的分享和研讨&#xff0c;同时也介绍了Earth在实现智能体系统的思考和实践。 最近有一篇文章把LLM驱动的智能体的构成讲解的很…

centos7安装图形化界面

一键安装并生效脚本 #!/bin/bash # 安装X(X Window System) yum groupinstall -y "X Window System"# 安装图形界面软件 yum groupinstall -y "GNOME Desktop"# 设置开机进入图形界面 systemctl set-default graphical.target# 进入图形界面 startx安装 …

Windows | [出现错误 2147942402 (0x80070002) (启动“ubuntu2004.exe”时)]

Windows | [出现错误 2147942402 (0x80070002) (启动“ubuntu2004.exe”时)] C:\WINDOWS\system32\wsl.exe -d Ubuntu-20.04

Verilog基本语法之数据类型

Verilog 是一种用于数字逻辑电路设计的硬件描述语言&#xff0c;可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 既是一种行为级&#xff08;可用于电路的功能描述&#xff09;描述语言又是一种结构性&#xff08;可用于元器件及其之间的连接&#xff09;描述语言。 …

深度了解机器人行业全貌

产品分类 机器人主要可分为工业机器人、服务机器人和特种机器人,主要产品如下图所示。 机器人主要分类 资料来源:36氪、华泰证券《机械设备行业专题研究-商用服务机器人:曙光已现蓝海可期-220105》。 其中工业机器人的主要种类及应用领域如下图所示。 工业机器人主要类型及…

docker安装失败 应用程序无法启动,因为应用程序的并行配置不正确

问题描述 报错“应用程序无法启动&#xff0c;因为应用程序的并行配置不正确”。 配置&#xff1a;windows10 解决过程 网上的解决方案有三种&#xff1a; 启动windows服务Windows Modules Installer。运行sxstrace.exe。安装visual c相关依赖。下载visual studio installer…

Python基础 —— 输入输出

〇、概述 当我们编写代码时&#xff0c;必不可少地需要通过敲击键盘来向电脑输入数据&#xff0c;然后显示器将把我们想要的内容显示出来&#xff1b;这其中需要很多复杂的知识&#xff0c;为了简化操作&#xff0c;便有人将其封装成了 print() 和 input() 两个函数。 一、输出…

LiDAR SLAM 闭环——BoW3D论文详解

标题&#xff1a;BoW3D: Bag of Words for Real-Time Loop Closing in 3D LiDAR SLAM 作者&#xff1a;Yunge Cui,Xieyuanli Chen,Yinlong Zhang,Jiahua Dong,Qingxiao Wu,Feng Zhu 机构&#xff1a;中科院沈阳自动化研究所 来源&#xff1a;2022 RAL 现算法已经开源&#…

linux查看文件夹的命令

第一种&#xff1a; 最简单的查看方法可以使用ls -ll、ls-lh命令进行查看&#xff0c;当使用ls -ll&#xff0c;会显示成字节大小&#xff0c;而ls- lh会以KB、MB等为单位进行显示&#xff0c;这样比较直观一些。 ls -ll ls -lh 第二种&#xff1a; 通过命令du -h –max-de…

微信小程序视图层莫名出现”竖线“

写完视图层后&#xff0c;发现页面上莫名其妙的出现了一些“竖线”&#xff0c;如下图所示&#xff1a; 这段html代码是这样写的&#xff1a; <view class"other-des"><view class"section"><text class"section-num">{{cou…

服务器财务系统数据库被locked勒索病毒攻击后如何怎么办?如何快速解密恢复数据

在当今的数字化时代&#xff0c;信息安全问题已成为企业面临的重大挑战之一。企业的服务器财务系统数据库是企业最核心的资金管理和财务决策平台&#xff0c;一旦遭受勒索病毒攻击&#xff0c;重要财务数据并被锁定&#xff0c;可能导致严重的经济损失和业务中断。近期&#xf…