LoadBalance客户端负载均衡
1. 前言Ribbon
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。
2. LoadBalancer概述
LB负载均衡(Load Balance)是什么
简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用),常见的负载均衡有软件Nginx,LVS,硬件 F5等
spring-cloud-starter-loadbalancer组件是什么
Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。相比较于Ribbon,SpringCloud LoadBalancer不仅能够支持RestTemplate,还支持WebClient(WeClient是Spring Web Flux中提供的功能,可以实现响应式异步请求)添加链接描述
3. 客户端负载与服务端负载区别
- Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。
- loadbalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术
4. 负载均衡图示
LoadBalancer 在工作时分成两步:
第一步,先选择ConsulServer从服务端查询并拉取服务列表,知道了它有多个服务(上图3个服务),这3个实现是完全一样的,
默认轮询调用谁都可以正常执行。类似生活中求医挂号,某个科室今日出诊的全部医生,客户端你自己选一个。
第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。
5. 代码实现
仿照cloud-provider-payment8001建立cloud-provider-payment8002,cloud-provider-payment8003模拟3个服务
6. 测试
7. 使用
order80pom文件中加入如下内容
<!--loadbalancer--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
OrderController中加入如下代码
@GetMapping(value = "/consumer/pay/getConfigInfoByConsul")@Operation(summary = "测试查询consul配置信息",description = "测试查询consul配置信息")public String getConfigInfoByConsul(){return restTemplate.getForObject(PaymentSrv_URL + "/pay/getConfigInfoByConsul", String.class);}
轮询访问8001,8002,8003成功
8. 原理分析
使用DiscoveryClient动态获取所有上线的服务列表
简单模拟,在OrderController中使用DiscoveryClient获取服务列表
@Resourceprivate DiscoveryClient discoveryClient;/*** LoadBalance原理* 使用DiscoveryClient获取服务列表* @return*/@GetMapping("/consumer/discovery")public String discovery() {List<String> services = discoveryClient.getServices();for (String element : services) {System.out.println(element);}System.out.println("===================================");List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");for (ServiceInstance element : instances) {System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t" + element.getUri());}return instances.get(0).getServiceId() + ":" + instances.get(0).getPort();}
相关文章:
LoadBalance客户端负载均衡
1. 前言Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时࿰…...
Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接:Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描…...
逢3必过报数游戏-第13届蓝桥杯省赛Python真题精选
[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第84讲。 逢3必过报数游戏&…...
解决Qt的multimedia库在clion中依赖库补全的问题
解决Qt的multimedia库在clion中使用报错的问题 在clion中,使用Qt的multimedia库时会报如下错误: defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" 我猜测出现这个错误的原因很可能是因为…...
图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)
文章目录 非锐化掩模 (Unsharp Masking)拉普拉斯滤波器 (Laplacian Filter)效果对比总结 在图像处理中,锐化操作用于增强图像的边缘和细节,使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模(Unsharp Masking)和拉普拉斯滤波…...
windows用脚本编译qt的项目
mingw的 cd build ::设置jom环境 set PATHC:\Qt\Qt5.15.2\Tools\mingw810_32\bin;%PATH% set PATHC:\Qt\Qt5.15.2\5.15.2\mingw81_32\bin;%PATH% ::设置Qt环境 amd64_x86 或者 amd64 ::CALL "D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxilia…...
mybatis-plus使用拦截器实现sql完整打印
shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 在使用mybatis-plus(mybatis)的时候,往往需要…...
GPT-4并非世界模型,LeCun双手赞同!ACL力证LLM无法模拟真实世界
一直以来,支持LLM的观点之一是模型可以集成海量事实知识,作为通往「世界模拟器」的基础。虽然也有不少反对意见,但缺乏实证依据。那么,LLM能否作为世界模拟器? 最近,亚利桑那大学、微软、霍普金斯大学等机构…...
第 6 章: Spring 中的 JDBC
JDBC 的全称是 Java Database Connectivity,是一套面向关系型数据库的规范。虽然数据库各有不同,但这些数据库都提供了基于 JDBC 规范实现的 JDBC 驱动。开发者只需要面向 JDBC 接口编程,就能在很大程度上规避数据库差异带来的问题。Java 应用…...
[C++ STL] vector 详解
标题:[C STL] vector 详解 水墨不写bug 目录 一、背景 二、vector简介 三、vector的接口介绍 (1)默认成员函数接口 i,构造函数(constructor) ii,析构函数(destructor࿰…...
PHP简约轻型聊天室留言源码
无名轻聊是一款phptxt的轻型聊天室。 无名轻聊特点: 自适应电脑/手机 数据使用txt存放,默认显示近50条聊天记录 采用jqueryajax轮询方式,适合小型聊天环境。 访问地址加?zhi进入管理模式,发送 clear 清空聊天记录。 修改在…...
代码随想录算法训练营day23|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
669.修剪二叉搜索树 这道题目需要考虑当前节点是否在[low,high]之间, 因为是平衡二叉树, 所以当当前节点值小于low时,那么其左节点肯定更小,因此删除该节点的方式是给root节点返回其右节点的递归,注意:这里…...
实时通信websocket和sse
microsoft/fetch-event-source是一个JavaScript库,用于处理服务器发送的事件(Server-Sent Events,简称SSE)。它提供了一个简单易用的API,使得客户端可以与服务器进行实时通信。这个库主要用于浏览器环境 安装依赖npm i…...
(超详细)基于动态顺序表实现简单的通讯录项目
前言: 我们在上一章节用c语言实现了线性表中的的动态顺序表,那么顺序表就只是顺序表吗?当然不是,使用顺序表结构可以实现很多项目,许多项目的数据结构都会用到顺序表,本章节我们就要使用顺序表实现一个简易…...
修改SubVI的LabVIEW默认搜索路径
在启动顶级VI后,LabVIEW可能会遇到找不到subVI的情况。这通常是由于subVI的路径发生了变化或没有被正确配置。 LabVIEW默认搜索路径 默认情况下,LabVIEW会按以下顺序搜索文件位置(*表示LabVIEW将搜索子目录): <t…...
基于python深度学习的CNN图像识别鲜花-含数据集+pyqt界面
代码下载: https://download.csdn.net/download/qq_34904125/89383615 本代码是基于python pytorch环境安装的。 下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。 或可直接参考下面博文进行…...
第九站:Java黑——安全编码的坚固防线(第②篇)
4. 验证和过滤输入数据示例:使用Apache Commons Lang 对输入数据进行验证和过滤是防止多种安全漏洞的关键步骤,包括但不限于SQL注入和命令注入。Apache Commons Lang库提供了一些实用方法来帮助进行字符串操作和验证。以下是一个简单的示例,…...
如何优雅的删除正式环境中的大表
引起 MySQL 数据库性能抖动的原因有很多,比如大事务、定时批量查询等,而这些原因我们一般都会注意到。但是,有一个引起性能抖动的原因却经常被我们忽视,那就是在生产环境删除无用的大表,即 DROP TABLE。 一、为什么要 DROP TABLE? 生产环境中,为什么要 DROP TABLE?相…...
Vulnhub-DC-1,7
靶机IP:192.168.20.141 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 前言 1和7都是Drupal的网站,只写了7,包含1的知识点 信息收集 用nmap扫描端口及版本号 进入主页查看作者给的提示,不是暴力破解的…...
使用MySQL全文索引实现高效搜索功能
MySQL全文索引是MySQL提供的一种高效的搜索功能,可以快速地搜索文本内容。全文索引可以用于搜索大量文本数据,通常应用在文章、博客、论坛等需要搜索的场景中。 什么是MySQL全文索引 MySQL全文索引是一种用于快速搜索文本内容的索引技术。它可以在存储和…...
数据结构学习笔记-图
1.图的存储 (1)邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵表,边表int vexnum,arcnum; //图的当前顶点数和边…...
【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88
🎗️ 主页:小夜时雨 🎗️专栏:动态规划 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…...
51单片机STC89C52RC——2.3 两个独立按键模拟控制LED流水灯方向
目的 按下K1键LED流水向左移动 按下K2键LED流水向右移动 一,STC单片机模块 二,独立按键 2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug P3_1 引脚对应是K1 P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭,我们就需…...
Neo4j连接
终端输入: neo4j console 浏览器访问:http://localhost:7474/ 输入用户名和密码:neo4j, 梦想密码(首次neo4j) 代码连接用新的服务器地址: g Graph(neo4j://localhost:7687, auth(neo4j, ))…...
List 列表
文章目录 一、什么是 List 列表1.1 创建 List 列表的方式1.2 列表的新增函数方法1.3 列表的删除函数方法1.4 修改列表数据的方法1.5 列表的查询函数方法1.6 列表的排序和反序1.7 列表的复制 一、什么是 List 列表 List 列表:该数据类型定义的变量可以理解为是一个数…...
nginx ws长连接配置
nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下: server服务节点下,后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…...
Windows下访问wsl的数据
Windows下访问wsl的数据 有些人感受到的是雨,而很多人感受到的只有淋湿。 Windows下的wsl说实话还是挺不错的,对于开发而言,效果相当的可以。 比如在某个文件夹,Windows编辑好代码后,直接右键打开wsl,就可…...
机器学习笔记 - 用于3D数据分类、分割的Point Net简述
一、简述 在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transformer方法,几乎任何 2D 图像应用都会有某种现有的方法。然而,当涉及到 3D 数据时,现成的工具和方法并不那么丰富。3D 空间中一个工具就是Point …...
vscode 连接 GitHub
目录 vscode连接github一、解决 github 登录问题二、通过 SSH 连接 github1、只有一个 git 账号2、切换 git 账号3、在两个账号之间切换 vscode 连接 gitee一、通过 HTTPS 连接二、通过 SSH 连接 vscode连接github 在 vscode 中首次使用 git push 命令时会要求输入 github 账户…...
集合java
1.集合 ArrayList 集合和数组的优势对比: 长度可变 添加数据的时候不需要考虑索引,默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…...
做新闻网站开发和测试的硬件/宽带推广方案
Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注) 布尔型注入,跟less-15差不多,只需要把换成) 今天发现另一个新方式,只需要在Google的hackbar操作,比较简单 新方法来自wken…...
做dj音乐网站/网站系统
2021 年了,前端技术日新月异,发展迅速,前端公众号是不是感觉越来越多了?在着辞旧迎新之际,这里盘点几个前端开发工程师 2021 年必须关注的优质公众号,希望对你有所帮助。大家可以像我一样,利用碎…...
网站做自签发证书/专业网站优化
作者: _陈哈哈 来源: blog.csdn.net/qq_39390545/article/details/107020686Part1前言BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧&…...
阿里巴巴网站怎么做/网络营销策划方案模板范文
目录前言🚗1.寄存器简介🚗2.从寄存器的角度分析C代码🚗3.从寄存器的角度分析函数调用过程🚗4.问题集锦🚗5.彩蛋:Compiler Explore使用简介准备写这么一个系列文章:从寄存器的角度来分析函数调用…...
做网站在哪儿买空间/域名停靠
arduino开发环境配置前言一、获取安装arduino二、HelloWorld工程总结前言 SP32开发环境大致有3种: 1.官方提供的Espressif-IDE 2.arduino开发环境 3.纯linux开发环境 前面用Espressif-IDE搭建了开发环境,这里搭建一个arduino的开发环境。 一、获取安装…...
深色调网站/31省市新增疫情最新消息
打开被【限制编辑】的加密文档,单击【文件】→【另存为】菜单,会弹出下图所示窗口:将此文档的保存类型选择“网页文件(*.html;*.htm)”,然后点击保存。用记事本、写字板或editplus打开刚刚保存的html文件,用快捷键Ctrl…...