当前位置: 首页 > news >正文

深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解

负载均衡

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/

如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。

这其中比较难理解的就是最少活跃调用数是如何进行统计的?

讲道理 最少活跃数应该是在服务提供者端进行统计的, 服务提供者统计有多少个请求正在执行中。 但在Dubbo中, 就是不讲道理, 它是在消费端进行统计的, 为什么能在消费端进行统计?

逻辑是这样的:

1. 消费者会缓存所调用服务的所有提供者, 比如记为p1 、p2 、p3三个服务提供者, 每个提供者内都有一 个属性记为active 默认位0

2. 消费者在调用次服务时, 如果负载均衡策略是leastactive

3. 消费者端会判断缓存的所有服务提供者的active 选择最小的, 如果都相同, 则随机

4. 选出某一 个服务提供者后, 假设位p2, Dubbo就会对p2 .active+1

5. 然后真正发出请求调用该服务

6. 消费端收到响应结果后, 对p2 .active-1

7. 这样就完成了对某个服务提供者当前活跃调用数进行了统计, 并且并不影响服务调用的性能

服务超时在服务提供者和服务消费者上都可以配置服务超时时间, 这两者是不一 样的。

消费者调用  个服务, 分为三步:

1. 消费者发送请求  网络传输)

2. 服务端执行服务

3. 服务端返回响应  网络传输)

如果在服务端和消费端只在其中一 方配置了timeout 那么没有歧义, 表示消费端服务的超时时间,  费端如果超过时间还没有收到响应结果, 则消费端会抛超时异常,  服务端不会抛异常, 服务端在执行   服务后, 会检查执行该服务的时间, 如果超过timeout 则会打印一 个超时日志 。服务会正常的执行完。

如果在服务端和消费端各配了一 timeout 那就比较复杂了, 假设

1. 服务执行为5s

2. 消费端timeout=3s

3. 服务端timeout=6s

那么消费端调用服务时, 消费端会收到超时异常  因为消费端超时了), 服务端一 切正常  服务端没有超 时) 

集群容错

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/fault-tolerent-strategy/

集群容错表示: 服务消费者在调用某个服务时, 这个服务有多个服务提供者, 在经过负载均衡后选出其中  个服务提供者之后进行调用  但调用报错后, Dubbo所采取的后续处理策略。

服务降级

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/service-downgrade/

服务降级表示: 服务消费者在调用某个服务提供者时, 如果该服务提供者报错了, 所采取的措施。

集群容错和服务降级的区别在于:

1. 集群容错是整个集群范围内的容错

2. 服务降级是单个服务提供者的自身容错

本地存根

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-stub/

本地存根, 名字很抽象, 但实际上不难理解, 本地存根就是一 段逻辑, 这段逻辑是在服务消费端执行的  这段逻辑一 般都是由服务提供者提供, 服务提供者可以利用这种机制在服务消费者远程调用服务提供者之

前或之后再做一些其他事情,比如结果缓存,请求参数验证等等。

本地伪装

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-mock/

本地伪装就是Mock,Dubbo    Mock 的功能相对于本地存根更简单一点,Mock 其实就是Dubbo 中的服务

容错的解决方案。

参数回调

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/callback-parameter/

官网上的Demo 其实太复杂,可以看课上的Demo 更为简单。

首先,如果当前服务支持参数回调,意思就是:对于某个服务接口中的某个方法,如果想支持消费者在调 用这个方法时能设置回调逻辑,那么该方法就需要提供一个入参用来表示回调逻辑。

因为Dubbo 协议是基于长连接的,所以消费端在两次调用同一个方法时想指定不同的回调逻辑,那么就需 要在调用时在指定一定key 进行区分。

异步调用

官网地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/

理解起来比较容易,主要要理解CompletableFuture       , 如果不理解,就直接把它理解为Future

其他异步调用方式: Dubbo 同步调用太慢,也许你可以试试异步处理

泛化调用

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-reference/

泛化调用可以用来做服务测试。

Dubbo中, 如果某个服务想要支持泛化调用  就可以将该服务的generic属性设置为true 那对于服务消 费者来说, 就可以不用依赖该服务的接口  直接利用GenericService接口来进行服务调用 

泛化服务

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-service/

实现了GenericService接口的就是泛化服务

Dubbo中的REST

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/rest/

注意DubboREST也是Dubbo所支持的一 种协议。

当我们用Dubbo提供了一 个服务后, 如果消费者没有使用Dubbo也想调用服务, 那么这个时候我们就可以 让我们的服务支持REST协议, 这样消费者就可以通REST形式调用我们的服务了。

管理台

github地址: GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo

动态配置

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/config-rule/

注意动态配置修改的是服务参数 并不能修改服务的协 IP PORT VERSION GROUP 因为这5个 信息是服务的标识信息, 是服务的身份证号, 是不能修改的。

服务路由

官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/routing-rule/

什么是蓝绿发布、灰度发布

什么是蓝绿部署、滚动发布和灰度发布? - 知乎

Zookeeper 可视化客户端工具

Zookeeper 可视化客户端:

Zoolnspector.zip

相关文章:

深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解

负载均衡 官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的? 讲道理, 最少活跃数…...

备战2024美赛数学建模,文末获取历史优秀论文

总说(历年美赛优秀论文可获取) 数模的题型千变万化,我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路,这些往往是美赛阅卷官最看重的点,突破了这些点,才能真正让你的美赛论文更上…...

Java加密解密大全(MD5、RSA)

目录 一、MD5加密二、RSA加解密(公加私解,私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式:5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…...

C语言程序设计考试掌握这些题妥妥拿绩点(写给即将C语言考试的小猿猴们)

目录 开篇说两句1. 水仙花数题目描述分析代码示例 2. 斐波那契数列题目描述分析代码示例 3. 猴子吃桃问题题目描述分析代码示例 4. 物体自由落地题目描述分析代码示例 5. 矩阵对角线元素之和题目描述分析代码示例 6. 求素数题目描述分析代码示例 7. 最大公约数和最小公倍数题目…...

编译ZLMediaKit(win10+msvc2019_x64)

前言 因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用 一、需要安装的软件…...

JS-基础语法(一)

JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么? 是一种运行在客户端(浏览器)的编程语言,可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…...

18款Visual Studio实用插件(更新)

前言 俗话说的好工欲善其事必先利其器,安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升,避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用,大家有更好的插件推荐可在文…...

三、java线性表(顺序表、链表、栈、队列)

java线性表 三、线性表1.1 顺序表1.2 链表1.2.1 单向链表(Singly Linked List)1.2.2 双向链表(Doubly Linked List) 1.3 LinkedList VS ArrayList1.3.7 使用 LinkedList 的场景 1.4 栈1.5 队列 三、线性表 线性表是一种经典的数据…...

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…...

2023春季李宏毅机器学习笔记 03 :机器如何生成文句

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、大语言模型的两种…...

dplayer播放hls格式视频并自动开始播放

监控视频流为hls格式,需要打开或刷新页面自动开始播放,需要安装dplayer和hls.js插件,插件直接npm装就行,上代码 import DPlayer from dplayer import Hls from hls.js //jquery是用来注册点击事件,实现自动开始播放 i…...

使用Vivado Design Suite平台板、将IP目录与平台板流一起使用

使用Vivado Design Suite平台板流 Vivado设计套件允许您使用AMD目标设计平台板(TDP)创建项目,或者已经添加到板库的用户指定板。当您选择特定板,Vivado设计工具显示有关板的信息,并启用其他设计器作为IP定制的一部分以…...

PACS医学影像报告管理系统源码带CT三维后处理技术

PACS从各种医学影像检查设备中获取、存储、处理影像数据,传输到体检信息系统中,生成图文并茂的体检报告,满足体检中心高水准、高效率影像处理的需要。 自主知识产权:拥有完整知识产权,能够同其他模块无缝对接 国际标准…...

介绍几种常见的质数筛选法

质数筛选法 1.暴力筛选法 :smirk:2.普通优化 :rofl:3.埃氏筛法:cold_sweat:4.线性筛选法:scream: 质数:除了1和他本身没有其它因数的正整数就是质数。1不是质数,2是质数。 1.暴力筛选法 😏 原理 求x的质数,令y从2到 x \sqrt[]{x…...

Qt/QML编程学习之心得:Linux下读写GPIO(23)

在linux嵌入式系统中,经常需要一些底层操作,Linux就如window一样,也对底层BSP进行了封装,对device driver进行了封装,使用的话基本就是文件读写的方式来读取,所以也大大简化了上层应用对底层硬件的访问难度。 比如要对GPIO口进行访问,在Qt中有几种方法: 使用命令行方…...

Unity中URP下深度图的线性转化

文章目录 前言一、_ZBufferParams参数有两组值二、LinearEyeDepth1、使用2、Unity源码推导:3、使用矩阵推导: 三、Linear01Depth1、使用2、Unity源码推导3、数学推导: 前言 在之前的文章中,我们实现了对深度图的使用。因为&#…...

Low Poly Cartoon House Interiors

400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…...

[算法与数据结构][c++]:左值、右值、左值引用、右值引用和std::move()

左值、右值、左值引用、右值引用和std::move 1. 什么是左值、右值2. 什么是左值引用、右值引用3. **右值引用和std::move的应用场景**3.1 实现移动语义3.2 **实例:vector::push_back使用std::move提高性能** **4. 完美转发 std::forward**5. Reference 写在前面&…...

【QT】day3

1.登陆界面 2.登陆失败 3.登陆成功弹窗 4.点击OK后跳转 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow…...

c++ fork, execl 参数 logcat | grep

Linux进程编程(PS: exec族函数、system、popen函数)_linux popen函数会新建进程吗-CSDN博客 execvp函数详解_如何在C / C 中使用execvp()函数-CSDN博客 C语言的多进程fork()、函数exec*()、system()与popen()函数_c语言 多进程-CSDN博客 Linux---fork…...

QT:单例

单例的定义 官方定义:单例是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 单例的写法 抓住3点: 构造函数私有化(确保只有一个实例)提供一个可以获取构造实例的接口(提供唯一的实…...

IPv6路由协议---IPv6动态路由(OSPFv3-4)

OSPFv3的链路状态通告LSA类型 链路状态通告是OSPFv3进行路由计算的关键依据,链路状态通告包含链路状态类型、链路状态ID、通告路由器三元组唯一地标识了一个LSA。 OSPFv3的LSA头仍然保持20字节,但是内容变化了。在LSA头中,OSPFv2的LS age、Advertising Router、LS Sequence…...

移动通信原理与关键技术学习(4)

1.小尺度衰落 Small-Scale Fading 由于收到的信号是由通过不同的多径到达的信号的总和,接收信号的增强有一定的减小。 小尺度衰落的特点: 信号强度在很小的传播距离或时间间隔内的快速变化;不同多径信号多普勒频移引起的随机调频&#xff…...

第二百五十八回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"模拟对话窗口的页面"相关的内容,本章回中将介绍如何创建一个可以输入内容的对话框.闲话休提,让我们一起Talk Flutter吧。 1. 概念…...

freesurfer-reconall后批量提取TIV(颅内总体积)

#提取TIV #singleline=$(grep Estimated Total Intracranial Volume /usr/local/freesurfer/subjects/bect-3d+bold-wangjingchen-4.9y-2/stats/aseg.sta...

【GO】如何用 Golang 的 os/exec 执行 pipe 替换文件

背景 主要记录一下怎么用 Golang 的 os/exec 去执行一个 cmd 的 pipeline,就是拿 cmdA 的输出作为 cmdB 的输入,这里记录了两种方法去替换文件里面的字符串。 pipe 那个逻辑在 demo1 里。 另外一种是直接读文件做替换,一不小心两个都放进来了…...

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…...

2023年度总结 - 职业生涯第一个十年

2023年只剩下最后一周,又到了一年一度该做年末总结的时候了。 回想起去年,还有人专门建立了一个关于年度总结文章汇总的仓库。读了很多篇别人写的,给了我很多的触动和感想。这里的每篇文章都是关于某个人这一整年的生活和工作的轨迹啊。即使你…...

setup 语法糖

只有vue3.2以上版本可以使用 优点: 更少的样板内容,更简洁的代码 能够使用纯 Typescript 声明props 和抛出事件 更好的运行时性能 更好的IDE类型推断性能 在sciprt标识上加上setup 顶层绑定都可以使用 不需要return ,可以直接使用 使用组件…...

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除 …...

平面设计资料网站/百度统计平台

python限定方法参数类型、返回值类型、变量类型等 typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型、变量类型不符合。作为开发文档附加说明,方便使用者调用时传入和…...

做进出口外贸网站/关键词全网指数查询

如果有一天,你打开手机,发现显示时间与真实时间相差一刻钟左右,你会做什么?你会想到穿越吗?如果你想太久,可能会错过早晨通勤车,被早高峰堵住,因而迟到。这件事发生在北京10月12日晚…...

小程序怎么做网站/营销网址

现在阶段的学习完全到了自学,那么整理文献也必须有自己的一套思路和办法。不像硕士阶段导师给论文,而是自我指导读论文,必须有一种类似版本控制和库的快速调用的机制。而Endnote越来越必须了。 首先遇到的问题是导入的格式问题,这…...

学生萝莉做h视频网站/网站seo基本流程

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明。我会加上[lufy:],另外。鄙人webgl研究还不够深入,一些专业词语,假设翻译有误&#xff0…...

wordpress+技术类模板/地推网推平台

第1章  嵌入式LinxuC语言开发工具 第2章  数据 第3章  数据的输入输出 第4章  运算符和表达式 第5章  程序结构和控制语句 第6章  数组 第7章  指针 第8章  函数 第9章  用户自定义数据类型 第10章  嵌入式C语言的高级用法 第11章  嵌入式Linux内核常见数…...

wordpress 查看url/百度手游排行榜

【题目】方阵填数:在一个 N*N的方阵中,填入 1,2..... N*N个数,并要求构成如下格式: 图例:10 11 12 19 16 13 28 15 14 37 6 5 4【上手】观察图例,不难看出这是一个螺旋矩阵,下面是色…...