从0到1实现RPC | 04 负载均衡和静态注册中心

一、Router的定义

Router路由用于预筛选,Dubbo有这样的设计,SpringCloud没有。

图片

二、LoadBanlancer定义

负载均衡器:默认取第一个

图片

当前支持随机和轮询两种负载均衡器。

随机:从所有provider中随机选择一个。

图片

轮询:每个provider服务按照顺序,依次调用

图片

三、注册中心的定义

  1. 开始方法start();
  2. 停止方法stop();
  3. Provider的注册方法register();
  4. Provider的取消注册方法unregister();
  5. Consumer的获取所有服务方法fetchAll();
  6. 默认提供的静态注册中心类型,是为了后续的动态注册中心做准备。都是空方法,只是fetchAll()默认返回了所有providers;

图片

四、RpcContext定义

RpcContext用于封装上下文参数,避免参数过多传递。当前有过滤器Filter,负载均衡器LoadBalancer、路由器Router。

图片

五、创建Bean

在消费者配置类ConsumerConfig中创建Bean,包括注册中心,路由器和负载均衡器(这里使用的是轮询)。

图片

六、封装代理类

在消费者启动类ConsumerBootstrap中, 把路由器router和负载均衡器loadBalancer封装到RpcContext中。

在创建代理对象时,通过注册中心获取到所有的服务提供者providers,然后联合上下文信息RpcContext一起传递给代理类。

图片

在代理类中完成负载均衡,确定调用的服务类。

图片

七、测试

启动三个服务提供者provider,端口分别是8081,8082,8083

图片

启动服务消费者Consumer,配置好服务提供者provider的地址。

图片

同一个接口连续调用三次,可以看到返回结果,依次访问的是8081,8082,8083这三个服务,使用轮询负载均衡的目的已经成功了。

图片

图片

图片

工程地址:

https://github.com/midnight2104/midnight-rpc/tree/lesson4

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

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

相关文章

在 Jupyter Notebook 中轻松切换 Python 虚拟环境!

目录 1. 进入虚拟环境 2. 安装 ipykernel 3. 添加 kernel 4. 启动 Jupyter Notebook 5. 选择 kernel 1. 进入虚拟环境 进入cmd,输入conda activate myenv,myenv是虚拟环境名 2. 安装 ipykernel 确保虚拟环境中已安装了 ipykernel 包。如果没有&a…

【嵌入式硬件】三极管伏安特性曲线-饱和区

1.三极管伏安特性 三极管工作电路如下图所示。 三极管伏安特性曲线 书本上的描述: 截止区:三极管工作在截止状态,当发射结的电压Ube 小于 导通电压(0.6V-0.7V),发射结没有导通;集电结处于反向偏置,没有放大作用。 放大区:三极管的发射极加正向电压(…

Win10 下 Vision Mamba(Vim-main)的环境配置(libcuda.so文件无法找到,windows系统运行失败)

目录 1、下载NVIDIA 驱动程序、cuda11.8、cudnn8.6.0 2、在Anaconda中创建环境并激活 3、下载gpu版本的torch 4、配置环境所需要的包 5、安装causal_conv1d和mamba-1p1p1 安装causal_conv1d 安装mamba-1p1p1 6、运行main.py失败 请直接拉到最后查看运行失败的原因&am…

Linux+HA高可用24X7的安全保证

一. 介绍作为服务器,需要提供一定的24X7的安全保证,这样可以防止关键节点的宕机引起系统的全面崩溃。利用OpenSource开源软件,完成系统的高可靠双机热备方案。基于linux的 HA软件可靠稳定,比使用商业版本的HA软件降低成…

ubuntu-server部署hive-part3-安装mysql

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 部署mysql 下载上传 下载地址 https://downloads.mysql.com/archives/community/ 以root用户上传,/usr/loc…

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测 目录 时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab基于CFBP级联前向BP神经网络时序预测(完整源码和数据); 2.数据集为excel…

个人品牌打造IP孵化运营培训教程架构课件

【资料持续更新,以防走丢】 个人品牌打造IP孵化运营培训教程架构课件 部分资料预览 资料部分是网络整理,仅供学习参考。 个人品牌运营合集 (完整资料包含以下内容)目录 详细的个人IP运营方案: 1. 确定个人定位和…

Java基础——二、数据类型

二、数据类型 基本类型 类型说明 类型单位(Byte)取值范围byte1[128~127]short2[-32768~32767]int4[-2147483648~2147483647]char2[\u0000~\uFFFF]:注意加’ ’float4[3.402823e38 ~ 1.401298e-45]:e38表示是乘10的38次方double…

macbook(m1) ubuntu下载,复制粘贴和国内镜像源配置

ubuntu下载使用 官网下载Ubuntu 22.04.4 LTS (Jammy Jellyfish) Daily Build 打开后根据电脑的架构选择安装包,想要下载其他版本也可在官网中自行搜索。 我安装时舍友说他安装的是22.04这个版本,我也就跟着他安装了 注意:下载的版本最好有…

详解 Redis 在 Ubuntu 系统上的安装

在 Ubuntu 20.04 安装 Redis 1. 先切换到 root 用户 在 Ubuntu 20.04 中,可以通过以下步骤切换到 root 用户: 输入以下命令,以 root 用户身份登录: sudo su -按回车键,并输入当前用户的密码(即具有 sudo…

Python爬虫-懂车帝新能源汽车近一年销量榜

前言 本文是该专栏的第24篇,后面会持续分享python爬虫干货知识,记得关注。 笔者在本专栏之前,有详细介绍以“懂车帝平台的新能源汽车销量榜单”为例,获取各车型的销量排行榜单数据。而本文,笔者将单独详细来介绍如何获取“近一年的新能源汽车销量榜单”数据。 具体实现思…

Python如何解决“滑动拼图”验证码(8)

前言 本文是该专栏的第67篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,或多或少都会接触到一些需要解决验证码才能正常获取数据的平台。 在本专栏之前的文章中,笔者有详细介绍通过python来解决多种“验证码”(点选验证,图文验证,滑块验证,滑块…

【c++】类和对象(七)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到类和对象的最后一部分 目录 1.static成员1.1特性 2.友元2.1引入&#xff1a;<<和>>的重载2.2友元函数2.3友元类 3.内部类4.匿名对象5.拷…

flink源码编译-job提交

1、启动standalone集群的taskmanager standalone集群中的taskmanager启动类为 TaskManagerRunner 2 打开master启动类 通过 ctrln快捷键&#xff0c;找到、并打开类&#xff1a; org.apache.flink.runtime.taskexecutor.TaskManagerRunner 3 修改运⾏配置 基本完全按照mas…

【网站项目】三省学堂-学习辅助系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C#实现Word文档转Markdown格式(Doc、Docx、RTF、XML、WPS等)

文档格式的多样性丰富了我们的信息交流手段&#xff0c;其中Word文档因其强大的功能性而广受欢迎。然而&#xff0c;在网络分享、版本控制、代码阅读及编写等方面&#xff0c;Markdown因其简洁、易于阅读和编辑的特性而展现出独特的优势。将Word文档转换为Markdown格式&#xf…

SpringMVC --- 老杜

1、什么是SpringMVC&#xff1f; SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的及部分&#xff0c;…

Aurora8b10b(1)IP核介绍并基于IP核进行设计

文章目录 前言一、IP核设置二、基于IP核进行设计2.1、设计框图2.2、aurora_8b10b_0模块2.3、aurora_8b10b_0_CLOCK_MODULE2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC2.5、aurora8b10b_channel模块2.6、IBUFDS_GTE2模块2.7、aurora_8b10b_0_gt_common_wrapper模块2.8、aurora8b10…

Meta Pixel:助你实现高效地Facebook广告追踪

Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具&#xff0c;只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码&#xff0c;安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…

Leetcode 64. 最小路径和

心路历程&#xff1a; 第一反应像是一个回溯问题&#xff0c;但是看到题目中要求最值&#xff0c;大概率是一道DP问题。并且这里面的递推关系也很明显。 这里面边界条件可以有多种处理方法。 解法&#xff1a;动态规划 class Solution:def minPathSum(self, grid: List[List…