Dubbo 注册,调用,通信,容错

news2024/11/30 20:36:41

Dubbo简化模型

3种开发方式

开发方式

举例

特点

XML配置

业务代码零侵入

扩展修改方便

注解方式

@EnableDubbo

@DubboService

@DubboReference

扩展修改方便

修改需要重新编译代码

API编程

DubboBootstrap

ServiceConfig

ReferenceConfig应用

业务侵入性大

修改复杂

修改后需要重新编译

Dubbo 提供者

注册流程

隐式参数

不改变发布者的接口定义的情况下,传递参数

设置参数RpcContext.getContext().setAttachment("parameter",123);

获取参数RpcContext.getContext().getAttachment("parameter");

生产一般不适应,防止产生技术债务

多版本发布流程

1.低流量时段,先升级一半提供者为新版本。

2.升级消费者为新版本

3.之后将剩下的一般提供者调整为最新版本

服务调用者

调用流程

EchoService

所有Dubbo 引用的服务,都可以强转为EchoService, 内部方法$echo ,可以用于测试调用链路是否是通的。

GenericService 泛化调用,生产应禁用

没有API的模型,参数返回值都是Map

通讯机制

Protocol协议层

Exchange 信息交换层,封装请求,响应

Transport 网络传输层,依托netty,封装统一接口

Serialize 序列化层,数据序列化,反序列化

核心接口

Protocol 接口 export 提供者使用 暴露服务, refer调用者使用,引用服务

Exchanger 接口 bind 提供者使用绑定服务 connect调用者使用, 连接服务

Transport 接口 bind 提供者使用服务端 connect 调用者使用,连接服务

举例:

DubboProtocol 创建ExchangeServer (HeaderExchanger)

HeaderExchanger :

  1. HeatbeatTimer 心跳机制
  2. Transport#bind

NettyTransporter 2个版本,一般使用的是4的那个版本

内部创建nettyServer,使用AbstractServer#send 委托Channel 发送消息

容错

集群容错

cluster配置+重试retries @DubboReference说明

cluster配置 项

failover 一个提供者不行,尝试下一个

failfast 提供者失败,抛出异常

failsafe 提供者失败,提供者记录日志

failback 提供者A失败,定时重试,继续访问提供者A

forking 并行访问,有一个提供者返回成功,就返回

broadcast 广播,任意提供者失败,就报错

服务降级

首选明确,核心流程是不能降级的!@DubboReference 的mock进行配置

2中方式 调用者mock 一般用这个,

提供者stub 一般不使用

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

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

相关文章

【前端学习】React学习资料

React 是一种开源的 JavaScript 库,用于构建用户界面。它由 Facebook 开发并维护,已经成为了当今最流行的前端库之一。与其他框架不同,React 主要专注于视图层(View),旨在通过声明式、组件化的方式来构建复…

Pagination分页(antd-design组件库)展示所有配置选项和onChange的作用

1.Pagination分页 采用分页的形式分隔长列表,每次只加载一个页面。 2.何时使用 当加载/渲染所有数据将花费很多时间时; 可切换页码浏览数据。 组件代码来自: 分页 Pagination - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-d…

redis到底是怎么样进行渐进式hash的

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。那么redis的底层是如何来存储数据的呢? 一、redis如何在存储大量的key时候,查询速度还能接近O(1)呢&#xf…

分布式事务方案学习

第100篇文章啦!分布式事务在面试中分布式事务也是十分重要的点,所以学习完分布式锁后我们就来学习分布式事务吧。 事务表示的是我们在业务逻辑中对数据库进行操作的一组单元,需要同时成功或同时失败,不了解的小伙伴们可以看一下下…

Linux编译器-gcc/g++(动静态链接)

目录 一、Linux编译器-gcc/g的使用1.1 背景知识1.2 预处理,编译,汇编,链接1.3 动静态链接 二、补充sudo设置 一、Linux编译器-gcc/g的使用 1.1 背景知识 我们为什么能在windows或者linux下进行C/C或者其它形式的开发呢?前提条件…

我在VScode学Java(Java一维数组、二维数组、JVM中的堆和栈)重制版

​ 我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:《我在VScode学Java》 Java一维数组、二维数组 零._.在Java中_什么是数组Java 数组是一种数据结构,存储一组相同类型的数据。引…

Docker网络模型(七)使用 IPvlan 网络

使用 IPvlan 网络 IPvlan 驱动为用户提供了全面控制 IPv4 和 IPv6 寻址的能力。 IPvlan 让操作者能完全操控二层(数据链路层)网络的 vlan 标签,甚至也提供了三层(网络传输层)路由控制给感兴趣的用户。对于抽象出物理限…

【SpringSecurity】CSRF、环境配置、授权、认证功能、记住我功能实现

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击开发环境搭建认证直接认证使用数据库认证自定义登录界面 授权基于角色的授权基于权限的授权使用注解判断权限 记住我SecurityContext SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核…

Java快速安装以及入门指南

安装 Java 环境教程 Java 是一种广泛应用于软件开发、Web 应用程序和移动应用程序等领域的编程语言。如果您要使用 Java 进行开发或运行需要 Java 程序,您需要先在计算机上安装 Java 环境。 本教程将向您介绍如何在 Windows 操作系统上安装和验证 Java 环境。还将…

第2章 可行性研究

文章目录 第2章 可行性研究2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.3.1符号2.3.3 分层 2.4 数据流图2.4.1 符号1. 数据源点或终点2. 数据加工(变换数据的处理)3. 数据存储4.数据流数据流与数据加工之间的关系 2.4.2绘制数据流图的例子顶…

chatgpt赋能python:Python3.6.5到Python3.7.5:升级指南

Python 3.6.5到Python 3.7.5:升级指南 Python是一种广泛使用的编程语言,拥有强大的库和框架,能够开发各种类型的应用程序。在Python的发行版中,版本更新是常见的过程,以提供更好的性能和新的功能。 本文将介绍如何将…

手记系列之六 ----- 分享个人使用kafka经验

前言 本篇文章主要介绍的关于本人从刚工作到现在使用kafka的经验,内容非常多,包含了kafka的常用命令,在生产环境中遇到的一些场景处理,kafka的一些web工具推荐等等。由于kafka这块的记录以及经验是从我刚开始使用kafka&#xff0…

chatgpt赋能python:Python怎么一行一行读文本?

Python怎么一行一行读文本? 在Python中,要一行一行地读取文本文件,我们可以使用Python内置函数readline()。它每次读取一行文本,并且会自动把文本的换行符\n去掉。下面我们来详细了解如何使用readline()函数读取文本文件。 读取…

4.卡尔曼滤波原理及实战

欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录 0.关于卡尔曼1.卡尔曼滤波算法2.卡尔曼滤波算法的应用一个简单例子一个复杂的例子参考 0.关于卡尔曼 卡尔曼,匈牙利数学家,1930年出生于匈牙利首都布达佩斯…

chatgpt赋能python:Python数据分析:Vlookup函数在Python中的实现

Python数据分析:Vlookup函数在Python中的实现 简介 Vlookup是一种常见的数据分析函数,用于在两个数据表/数据集中查找并关联相应的数据。这个函数是在Excel中非常常见的,但是当我们进行大型数据分析时,我们可以使用Python来实现…

2023.6.8小记——嵌入式系统初识、什么是ARM架构?

今天还挺充实的,早上在图书馆本来想学一下notion,结果看李沐老师的动手深度学习看到十点半,在电脑上配置了李沐老师的d2l和jupyter,等后续有时间的时候再继续学。 下午看了一下notion的使用方法,这玩意初学者用起来是…

chatgpt赋能python:Python如何一行输出五个星号

Python如何一行输出五个星号 Python是一种流行的编程语言,它被广泛用于各种领域,包括Web开发,数据科学和机器学习。在这篇文章中,我们将探讨如何使用Python在一行中输出五个星号。 输出五个星号的方法 Python提供了几种方法来在…

牛客网语法刷题(C语言) — 输出格式化

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言—语法篇》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

从字符串中读写的方法:c语言中的sscanf、sprintf函数,c++中的I/O流strstream、stringstream

一、sscanf、sprintf函数 众所周知,c语言中我们常使用的标准输入输出流函数为scanf()、printf(),默认从键盘上输入数据、向屏幕输出数据。此外,c语言中还提供了另一组库函数sscanf()、sprintf()函数,它们的功能与前者相同&#x…

spark复习重点

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。它不仅包括传统的结构化数据,还包括非结构化数据、半结构化数据等多种形式的数据。大数据的处理需要使用特殊的技术和工具,如分布式存储、分布式计算、数据挖掘、机器学习等。 大…