Dubbo高级特性

ops/2025/2/10 9:48:39/

高级特性

  • 1.序列化
  • 2.地址缓存
  • 3.超时与重试
    • 超时
    • 重试
  • 4.多版本
  • 5.负载均衡
  • 6.集群容错
  • 7.服务降级

1.序列化

生产者与消费者之间传输对象
在这里插入图片描述

2.地址缓存

注册中心挂了,服务是否可以正常访问?

  • 可以,因为dubbo服务消费者在第一次调用时会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
  • 当服务提供者地址发生变化时,注册中心会通知服务消费者。

3.超时与重试

超时

在这里插入图片描述
dubbo利用超时机制解决这一问题

  • 设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  • 使用timeout属性配置超时时间,默认值1000,单位秒。
  • 默认重试次数2次。

服务提供者:

java">@Service(timeout = 3000, retries = 3) //当前服务超时时间为3秒,重试次数3次
public class UserServiceImpl implements UserService {@Overridepublic String sayHello() {return "hello dubbo!";}@Overridepublic User getUserById(int id) {//查询User对象User user = new User(1,"jack","123456");return user;}
}

服务消费者:

java">@RestController
@RequestMapping("/user")
public class UserController {//注入Service//@Autowired/*远程注入1.从zookeeper注册中心获取userService的访问url2.进行远程调用rpc3.将结果封装为一个代理对象,给变量赋值*/@Reference(timeout = 1000)private UserService userService;@RequestMapping("/sayHello")public String sayHello(){return userService.sayHello();}
}

建议:超时时间建议定义在服务提供方,而不是调用方。

重试

在这里插入图片描述

4.多版本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置接口的版本号
版本v1.0:

java">@Service(version = "v1.0", timeout = 3000, retries = 3) //当前服务超时时间为3秒,重试次数3次
public class UserServiceImpl implements UserService {@Overridepublic String sayHello() {return "hello dubbo!";}@Overridepublic User getUserById(int id) {//查询User对象User user = new User(1,"jack","123456");return user;}
}

版本v2.0:

java">@Service(version = "v2.0")
public class UserServiceImpl2  implements UserService {@Overridepublic String sayHello() {return "hello dubbo version 2.0";}@Overridepublic User getUserById(int id) {return null;}
}

服务消费者:
指定对应的版本号

java">@RestController
@RequestMapping("/user")
public class UserController {/*远程注入指定对应的版本*/@Reference(version = "1.0")private UserService userService;@RequestMapping("/sayHello")public String sayHello(){return userService.sayHello();}
}

5.负载均衡

在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 weighted random 基于权重的随机负载均衡策略。
具体实现上,Dubbo 提供的是客户端负载均衡,即由 Consumer 通过负载均衡算法得出需要将请求提交到哪个 Provider 实例。
在这里插入图片描述

目前 Dubbo 内置了如下负载均衡算法,可通过调整配置项启用。

算法特性备注
Weighted Random LoadBalance加权随机默认算法,默认权重相同
RoundRobin LoadBalance加权轮询借鉴于 Nginx 的平滑加权轮询算法,默认权重相同,
LeastActive LoadBalance最少活跃优先 + 加权随机背后是能者多劳的思想
Shortest-Response LoadBalance最短响应优先 + 加权随机更加关注响应速度
ConsistentHash LoadBalance一致性哈希确定的入参,确定的提供者,适用于有状态请求
P2C LoadBalancePower of Two Choice随机选择两个节点后,继续选择“连接数”较小的那个节点。
Adaptive LoadBalance自适应负载均衡在 P2C 算法基础上,选择二者中 load 最小的那个节点

服务提供者可以设置权重

java">@Service(version = "v2.0",weight = 200)
public class UserServiceImpl2  implements UserService {@Overridepublic String sayHello() {return "hello dubbo version 2.0";}
}

服务消费者指定负载均衡算法

java">@RestController
@RequestMapping("/user")
public class UserController {/*远程注入loadbalance 指定负载均衡算法*/@Reference(version = "1.0",loadbalance = "random")private UserService userService;@RequestMapping("/sayHello")public String sayHello(){return userService.sayHello();}
}

6.集群容错

在这里插入图片描述
服务消费者指定集群容错的模式

java">@RestController
@RequestMapping("/user")
public class UserController {/*远程注入cluster参数指定集群容错模式*/@Reference(version = "1.0",loadbalance = "random",cluster = "failover")private UserService userService;@RequestMapping("/sayHello")public String sayHello(){return userService.sayHello();}
}

7.服务降级

服务降级方式:
在这里插入图片描述
服务消费者指定服务降级方式:

java">@RestController
@RequestMapping("/user")
public class UserController {/*mock 指定服务降级方式*/@Reference(mock = "force:return+null")private UserService userService;@RequestMapping("/sayHello")public String sayHello(){return userService.sayHello();}
}

更多高级特性参考官网:
https://cn.dubbo.apache.org/zh-cn/overview/mannual/


http://www.ppmy.cn/ops/157211.html

相关文章

开源身份和访问管理方案之keycloak(一)快速入门

文章目录 什么是IAM什么是keycloakKeycloak 的功能 核心概念client管理 OpenID Connect 客户端 Client Scoperealm roleAssigning role mappings分配角色映射Using default roles使用默认角色Role scope mappings角色范围映射 UsersGroupssessionsEventsKeycloak Policy创建策略…

一口气入门前端——HTML5入门

HTML5 1.1 HTML 介绍 HTML(超文本标记语言)是一种用于 Web 开发的标记语言,主要用来格式化和显示网页内容。可以将其视为一种文本文件,浏览器能够读取该文本文件并显示其中的内容。HTML支持多种元素(也称作标签&…

电脑远程控制vivo手机,切换按钮就能让vivo仅投屏、不受控制!

Linux系统在全球的市场份额并不高,继而很多便捷的软件都没有Linux的版本。如果想要用Linux远程控制安卓手机,找软件会比较麻烦,但是AirDroid网页版可以做到。 以vivo手机为例子,接下来讲解Linux系统电脑要远程控制安卓手机时&…

Windows图形界面(GUI)-QT-C/C++ - QT 文本编辑控件详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 概述 1. QLineEdit 1.1 特点 1.2 属性 1.3 常用方法 1.4 拓展应用 2. QTextEdit 2.1 特点 2.2 属性 2.3 常用方法 2.4 拓展应用 3. QPlainTextEdit 3.1 特点 3.2 属性 3.3…

从零开始学Docker(一)-镜像列表访问不到问题

最近在安装docker时碰到centos的归档问题,错误信息如下,以下列出了可行的解决方案: 错误信息 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorli…

【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛

数据结构考点:栈 题目描述: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0…

Visual Studio(VS)初始配置环境(scanf异常)

发现问题 当我们第一次安装Visual Studio&#xff08;VS&#xff09;且没有初次环境配置时&#xff0c;用某些函数时会发现报错异常。&#xff08;如下scanf函数为例&#xff09; #include<stdio.h>int main() {int a 0;scanf("%d", &a);printf("%…

【北上广深杭大厂编程面试题】C++篇...这里介绍堆区和栈区的区别?(二)

【北上广深杭大厂编程面试题】C篇…这里介绍堆区和栈区的区别&#xff1f;&#xff08;二&#xff09; 【北上广深杭大厂编程面试题】C篇…这里介绍堆区和栈区的区别&#xff1f;&#xff08;二&#xff09; 文章目录 【北上广深杭大厂编程面试题】C篇...这里介绍堆区和栈区的…