Springcloud基础(4)-Ribbon负载均衡

news2024/11/16 23:55:56

负载均衡

    • 1. Ribbon简单描述
    • 2. 在SpringCloud中查看相关处理源码
    • 3. ribbon的默认策略,懒加载
    • 3. 实操中的相关问题

1. Ribbon简单描述

Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
----来自百度
简单的说,这个Ribbon就是由netfix开发的一套用于转接请求的工具(除了自带的一些轮询、随机方式,也可以手动编译自己的负载均衡方式)。

即使用顺序发起请求-》到达ribbon->调用eurake
我记得ngnix也是存在负载均衡的?没错,ngnix也自带一个负载均衡,为轮询、最少连接等

2. 在SpringCloud中查看相关处理源码

  1. 在ribbon的负载均衡中,主走的配置类名称为:LoadBalancerInterceptor;实现接口为:ClientHttpRequestInterceptor(专门拦截住客户端发起的请求);
  2. 相关轮询的规则:所有规则的父类接口为IRule,其中实现了几个主要的方法:com.netflix.loadbalancer.IRule#choose(实现服务选择);
    在这里插入图片描述
  3. 调整IRule,即只需要重新定义一个对应的IRule规则,并将其放入容器,后续读取的时候便会按照这个来,如你可以实现一个类,继承IRule;这样可以自定义具体的规则。当然,普遍可以直接应用已经存在的规则,而无需自己去重新定义。
// 定义一个类

public class NewRule implements AbstractLoadBalancerRule{

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {

    }

    @Override
    public Server choose(Object key) {
        return null;
    }

    public NewRule() {
        super();
    }
}


// 在启动类中,将对应的新增规则放入容器即可。
   @Bean
    public IRule randomRule() {
        return new NewRule();
    }

ribbon默认实现的是ZoneAvoidanceRule规则,这个规则的基本描述是可以定好服务区的范围,然后在这个范围内去轮询,一般情况下,可能就是所有的服务直接轮询,因为很多公司服务可能都在一起,

3. ribbon的默认策略,懒加载

ribbon:
  eager-load:
    enabled: true  #默认为false,表示ribbon是需要等到使用的时候才加载;;
    clients: userservice  # 配置为 懒加载的服务

3. 实操中的相关问题

  1. 在这里我一开始用template调用其它模块的接口时,发现,eurake可以读取到正确的接口,但是却总是报错,连接失败:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://*****/***/***": Connection timed out: connect; nested exception is java.net.ConnectException: Connection timed out: connect] with root cause java.net.ConnectException: Connection timed out: connect ;
    由于一直看不出代码哪里有问题,于是怀疑是不是一开始的配置就不对,百度后,在网上发现有人也出现过类似的问题,且都是配置上过期的时间就会恢复正常。如下:
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setConnectTimeout(10*1000);
        requestFactory.setReadTimeout(10*1000);
        return new RestTemplate(requestFactory);
    }

通过上面的RestTemplate配置一下具体入参HttpComponentsClientHttpRequestFactory ;在默认的情况下,如果不配置具体的超时时间,就会一直抛出超时异常,目前都没弄明白为什么。
等后续学的差不多了统一把这些问题都过一下;;

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

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

相关文章

MySQL第四天作业 单表查询和多表查询

单表查询 创建表 CREATE TABLE emp (empno int(4) NOT NULL,ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,mgr int(4) NULL DEFAULT NULL,hiredate d…

【电子学会】2023年05月图形化一级 -- 舞蹈演出

舞蹈演出 1. 准备工作 (1)删除小猫角色; (2)添加角色Ballerina,为角色添加声音Bossa Nova; (3)添加背景Theater和Concert。 2. 功能实现 (1&#xff09…

STC89C52---定时器,中断

目录 一:定时器 1:简历 2:定时器/计数器0/1和相关寄存器 A:介绍 B: 相关寄存器 C:基本原理 3:定时器/计数器控制寄存器TCON 4:定时器/计数器工作模式寄存器TMOD (1)门控制 (2):使用STC-iSP软件生成配置 (2):使用STC-iSP软件定时器 二:中断 1:简历 B:中断寄存器 2…

【电子学会】2023年05月图形化四级 -- 还原轨迹

还原轨迹 1. 准备工作 (1)删除小猫; (2)从角色库添加“Butterfly 1”角色; (3)保留白色背景。 2. 功能实现 (1)点击绿旗,清除舞台&#xff…

利用Python实现网站内容监控及邮件提醒

目录 一、开启POP3/SMTP服务 二、利用SMTP库实现邮件发送 三、利用requests库监控网页关键字 四、常见问题 一、开启POP3/SMTP服务 以QQ邮箱为例:进入邮箱->设置->账户->开启POP3/SMTP等服务->获取授权码 ①首先进入QQ邮箱后点击设置 ② 点击邮箱…

【机器学习核心总结】什么是梯度下降

什么是梯度下降 根据已有数据的分布来预测可能的新数据,这是回归 希望有一条线将数据分割成不同类别,这是分类 无论回归还是分类,我们的目的都是让搭建好的模型尽可能的模拟已有的数据 除了模型的结构,决定模型能否模拟成功的关键…

IDEA+spring+spring mvc+mybatis+bootstrap+jquery+Mysql运动会管理系统

IDEAspringspring mvcmybatisbootstrapjqueryMysql运动会管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.运动会开幕信息4.运动会广播信息5. 比赛项目信息6.比赛成绩信息7.运动器材信息8.学生信息9.教师信息10.班级信息11. 院系信息12.开幕管理13.广播…

LVS + keepalived

一、keepalived概述1.1 keepalived 服务重要功能1.1.1 管理LVS负载均衡器软件1.1.2 支持故障自动切换(failover)1.1.3 实现LVS集中节点的健康检查(health checking)1.1.4 实现 LVS 负载调度器、节点服务器的高可用性(H…

Hcip第四次作业

要求: 1.如图连接,合理规划IP地址,所有路由器各自创建一个loopback接口 2.R1再创建三个接口IP地址为201.1.1.1/24、201.1.2.1/24、201.1.3.1/24 R5再创建三个接口IP地址为202.1.1.1/24、202.1.2.1/24、202.1.3.1/24 R7再创建三个接口IP地址为…

运维开发面试题第一期

1.tail -f和tail -F的区别是什么? tail -f 根据文件描述符进行追踪,当文件改名或被删除,追踪停止。 tail -F 根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续…

【通览一百个大模型】CodeX(OpenAI)

【通览一百个大模型】CodeX(OpenAI) 作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干…

01 |「沟通技巧」

前言 沟通是一个程序员需要具备的技能。 文章目录 前言一、学会沟通1. 为什么需要具备沟通能力2. 如何具备良好的沟通能力 二、沟通实践 一、学会沟通 1. 为什么需要具备沟通能力 程序员的工作能力一部分是需求的开发,另一部分是调试解决 Bug 的能力;快…

算法导论机考复习(数据处理)

素数筛选 求所有小于n的素数 #include<bits/stdc.h> using namespace std; const int N1000; int prim[N]; int n; int main() {while(cin>>n){//初始化2到n都是素数for(int i2;i<n;i){prim[i]1;}//从2到n把所有的是当前数的倍数的数都设置为0//不能设置自己为…

硬盘或者U盘提示需要格式化的解决办法

插入硬盘之后提示&#xff1a; 使用驱动器 G:中的光盘之前需要将其格式化 是否要将其格式化? 如下图所示 顿时慌了啊&#xff0c;里面还有比较重要的东西呢&#xff0c;这一下子完蛋&#xff1f; 遇事找某宝&#xff0c;上面估计有这种技术服务。果然有这一类的技术服务&…

数据库作业——select查询操作

数据库作业 创建数据库 mysql> create table worker( -> 部门号 int(11) not null, -> 职工号 int(11) primary key not null,-> 工作时间 date not null,-> 工资…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十一)

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

RabbitMQ ---- 消息队列

RabbitMQ ---- 消息队列 1. MQ 的相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 的分类1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 四大核心概念2.3 RabbitMQ 核心部分2.4 各个名词介绍2.5 安装 1. MQ 的相关概念 1.1 什么是 MQ MQ(message queue)&#xff0c;从字面…

03-2_Qt 5.9 C++开发指南_Qt全局定义、容器类、容器类的迭代器、Qt类库的模块

本篇简要介绍Qt全局定义中的数据类型、函数、宏定义&#xff1b;容器类中&#xff1a;顺序容器类、关联容器类&#xff1b;容器类的迭代器&#xff1b;Qt类库的模块。 文章目录 1.Qt全局定义1.1 数据类型定义1.2 函数1.3 宏定义1.3.1 QT_VERSION1.3.2 QT_VERSION_CHECK1.3.3 Q…

绘制等厚度图

clc;clear;close all; data xlsread(BRENT层等厚度.xlsx); x data(:,1) xmax max(x); xmin min(x); y data(:,2) ymax max(y); ymin min(y); z data(:,3); N 45; …

为什么没有getter方法无法成功返回new对象的json格式(chatgpt谬论)

标题防止太长所以精炼了些。springboot项目&#xff0c;restful风格下面&#xff0c;我们如果返回的是一个new的实体类对象是什么情况。 restful风格其实是要将返回的数据封装为json的&#xff0c;它是要去这样封装的。但是如果你不提供对象的get方法其实是没法返回的。接口测试…