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

Dubbo之参数配置(一)

目录

启动时检查

集群容错

负载均衡

线程模型

直连提供者

服务只订阅,不注册

只注册

静态服务

多协议配置

多注册中心注册(服务端)和多注册中心引用(消费端)

多版本

服务分组

分组聚合

结果缓存


启动时检查

dubbo默认会在启动时检查依赖的服务是否可用,不可用会抛出异常
1)xml中配置
没有提供者时报错 关闭某个服务的启动时检查: <dubbo:reference interface=“com.foo.Service” check=“false”/>
没有提供者时报错 关闭所有服务的启动时检查:<dubbo:consumer check=“false”/>
注册订阅失败时报错 关闭注册中心启动时检查: <dubbo:registry check=“false”/>
2)properties中配置
也可在dubbo.properties中配置
dubbo.reference.com.foo.Service.check=false
dubbo.reference.check=false 强制改变所有reference的check值,就算配置中有声明也会被覆盖
dubbo.consumer.check=false 只是设置check的缺省值,如果配置中有显示的声明,不会受影响
dubbo.registry.check=false

引用默认是延迟初始化的,只有引用被注入到其他Bean,或被getBean()获取,才会初始化
如果需要饥饿加载,没有引用也立即生成动态代理,可以配置
<dubbo:reference interface=“com.foo.Service” init=“true”/>

集群容错

  • 集群模式配置

<dubbo:service cluster=“failsafe”/> 或 <dubbo:reference cluster=“failsafe”/>
failover:失败自动切换,重试次数默认为2(不包含第一次) retries=“2”
failfast:快速失败,只发起一次调用,失败立即报错,常用于非幂等性操作
failsafe:失败安全,出现异常时直接忽略,常用于写入审计日志等操作
failback:失败自动恢复,后台记录失败请求,定时重发,常用于消息通知
forking:并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作,但浪费更多服务资源,fork="2"设置最大并行数
**broadcast:**广播调用所有提供者,逐个调用,任意一台报错则报错,常用于通知所有提供者更新缓存或日志等本地资源信息

负载均衡

默认为random随机调用
<dubbo:service interface=“” loadbalance=“roundrobin”/> 或 <dubbo:reference interface=“” loadbalance=“roundrobin”/>
Random:随机,按权重设置随机概率,调用量越大分布越均匀,动态调整提供者权重
RoundRobin:轮询,按权重设置轮询比例,容易出现提供者累积请求问题,当某一台机器很慢,卡在那里,所有请求就全卡了
LeastActive:最少活跃调用数,相同活跃数的随机,慢的提供者收到更少请求
ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者,某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动

线程模型

<dubbo:protocal name=“dubbo” dispatcher=“all” threadpool=“fixed” threads=“100”/>

  • Dispatcher

all:所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等
direct:所有消息都不派发到线程池,全部在IO线程上直接执行
message:只有请求响应消息派发到线程池
execution:只有请求消息派发到线程池
connection:在IO线程上,将连接断开事件放入队列,有序逐个执行,其他消息派发到线程池

  • ThreadPool

fixed:固定大小线程池,启动时建立线程,不关闭,一直持有
cached:缓存线程池,空闲一分钟自动删除,需要时重建
limited:可伸缩线程池,但池中线程数只会增长不会收缩。

直连提供者

使用场景:在开发及测试环境下,经常要绕过注册中心,只测试指定服务提供者,需要点对点直连A接口配置点对点,不影响B接口从注册中心获取列表
xml:<dubbo:reference interface=“” url=“dubbo://localhost:9999”/>
properties: 2.0以上自动加载${user.home}/dubbo-resolve.properties文件
com.demo.Service=dubbo://localhost:9999

服务只订阅,不注册

使用场景:有时候未开发完的服务放到注册中心,会影响消费者不能正常运行
<dubbo:registry address=“10.20.153.10:9090” register=“false” />

<dubbo:registry address=“10.20.153.10:9090register=false” />

只注册

使用场景:有时候需要将一个服务同时注册到两个注册中心,但是只从其中一个依赖其他服务
<dubbo:registry address=“10.20.153.10:9090” subscribe=“false” />
<dubbo:registry address=“10.20.153.223:9090” />

静态服务

使用场景:有时候希望人工管理服务提供者的上线和下线,此时须将注册中心标识为非动态管理模式
<dubbo:registry address=“10.20.153.10:9090” dynamic=“false” />
服务提供者初次注册时为禁用状态,需人工启用,断线时,将不会被自动删除,需人工禁用

多协议配置

使用场景:不同服务在性能上使用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议
//多协议配置
<dubbo:protocal name=“dubbo” port=“20880” />
<dubbo:protocal name=“rmi” port=“1099 />
//使用不同协议暴露服务
<dubbo:service interface=“com.demo.Service” ref=”" protocal=“dubbo” />
<dubbo:service interface=“” ref=“” protocal=“rmi”/>
//使用多个协议暴露服务
<dubbo:service id=“service” interface=“” ref=“” protocal=“dubbo,rmi” />

多注册中心注册(服务端)和多注册中心引用(消费端)

同多协议配置相似 可以通过注册中心id进行引用和服务注册<dubbo:registry id=“r1” address=“” />

多版本

使用场景: 当一个接口实现出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用
1.在低压力时间段,先升级一半提供者为新版本
2.再将所有消费者升级为新版本
3.然后将剩下的一半提供者升级为新版本
<dubbo:service interface=“” ref=“v1” version=“1.0.0” />
<dubbo:service interface=“” ref=“v2” version=“2.0.0” />

服务分组

使用场景:相同的接口,但是有不同的实现,需要区别对待
<dubbo:service group=“feedback” interface=“” />
<dubbo:service group=“member” interface=“” />
//任意组
<dubbo:service id=“” interface=“” group=“*” />

分组聚合

使用场景:比如菜单服务,接口一样,但有很多服务,用group区分,在消费方合并
搜索所有分组:<dubbo:reference interface=“” group=“*” merger=“true” />
合并指定分组:<dubbo:reference interface=“” group=“aaa,bbb” merger=“true”/>
指定方法合并(当设置为merger="false"时,可以指定某个方法不合并分组):
<dubbo:reference interface=“” group=“*”>
<dubbo:method name=“getMenuItems” merger=“true” />
</dubbo:reference>

结果缓存

使用场景:用于加速热门数据的访问速度
lru:最近最少使用原则删除多余缓存,保持最热数据
threadlocal:当前线程缓存

**jcache:**与JSR107集成,可以桥接各种缓存实现

相关文章:

  • Dubbo之服务分组、分组聚合。
  • 15.ThreadLocal的作用
  • Android 11 adb无线调试使用方法
  • 【安卓学习之常见问题】自定义组件-刷新后跳到第一行
  • 为农田解渴为人民群众解忧 国稻种芯-桃源:湖南坚守抗旱一线
  • 【SSM框架】Mybatis详解11(源码自取)之表关联关系
  • docker安装ES(elasticsearch7.4.2)
  • C++—— pass by value and use std::move
  • STM32CubeIDE更新ST LINK驱动失败解决方法
  • PHP cURL 函数
  • 可编程 USB 转串口适配器开发板 SHT3x-DIS 温湿度传感器芯片
  • Git - branch name
  • Vue+element 商品参数业务实现
  • Java项目:SSM博物馆售票管理系统
  • 资料美国二手APX582音频分析仪APX582
  • 【mysql】环境安装、服务启动、密码设置
  • Druid 在有赞的实践
  • git 常用命令
  • Javascript基础之Array数组API
  • nodejs实现webservice问题总结
  • React+TypeScript入门
  • Terraform入门 - 1. 安装Terraform
  • Vue组件定义
  • 第十八天-企业应用架构模式-基本模式
  • 提醒我喝水chrome插件开发指南
  • 想写好前端,先练好内功
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 移动端高清、多屏适配方案
  • ​如何防止网络攻击?
  • # .NET Framework中使用命名管道进行进程间通信
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.ajax中的eval及dataType
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (生成器)yield与(迭代器)generator
  • (一)UDP基本编程步骤
  • (转)菜鸟学数据库(三)——存储过程
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core引入性能分析引导优化
  • .net 程序发生了一个不可捕获的异常
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET企业级应用架构设计系列之技术选型
  • .net项目IIS、VS 附加进程调试
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • []sim300 GPRS数据收发程序
  • [2544]最短路 (两种算法)(HDU)
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C++随笔录] 红黑树