Dubbo的核心玩法三

Dubbo的服务延迟暴露

如果我们的服务启动过程中需要预热事件(再启动一段时间后性能才能到达最佳状态)比如初始化缓存,等待相关资源就位等,可以使用deplay进行延迟暴露

  1. 如上所示:我们只需要在服务的提供方的<dubbo:service />标签中添加delay属性,单位毫秒

  2. 若值为正数,则表示延迟暴露多少毫秒,在指定时间后再发布服务,

  3. 若值为-1,则表示在spring初始化完成后暴露服务

Dubbo的多注册中心

很多时候一个项目会有多个注册中心

同一个服务注册到多个注册中心_[一对多]

同一个服务可以注册到多个不同地域的注册中心,为多个不同地域的服务提供服务

修改服务提供者的配置文件,多个注册中心之间使用逗号分割,如下:

  

当然第二个集群是假的,知道牛啃南瓜怎么下嘴就行?当然你也可以使用ZK单机模式演示

不同的服务注册到不同的注册中心_[一对一]

一个项目中,不同的服务可以注册不同的注册中心:如下

  

同一个服务引用自不同的注册中心_[多对一]

同一个消费者需要调用两个注册中心的服务,而被调用的服务的接口名,版本号,分组等是相同的,不同中心的这个相同名称的服务CURD的是不同的数据库,即服务名相同,但是实现是不同的,修改服务消费者如下:

  

Dubbo的多协议支持

服务暴露协议

在我们前面的Demo中,服务提供者和服务的消费者是通过zookeepeer连接协议连接上Zookeeper注册中心的

  

为什么服务的提供者和消费者连接上Zookeeper,消费者就可以消费服务了呢?

  • zookeeper协议:是提供者/消费者连接注册中心的连接协议,并不是提供者和消费者之间的连接协议

  • 当消费者连接上注册中心后,在消费服务之前,首先需要连接上这个服务的提供者,虽然服务的消费者可以通过注册中心获取到服务提供者,但提供者对于消费者来说确实透明的,消费者并不知道真正的服务提供者是谁,不过无论服务的提供者是谁,消费者都需要连接上服务的提供者才可以获取到真正的服务,而这个连接也是需要专门的链接协议的,这个协议被称为服务的暴露协议

  • 在我们之前的Demo中并没有看到服务暴露协议的相关配置,项目也是可以运行,因为Dubbo采用了默认的暴露协议,Dubbo服务暴露协议

  • Dubbo服务暴露协议,适用于小数据量大并发的服务调用,以及服务消费者主机数远远大于服务提供者主机的情况,服务提供少,需求多,单个主机应对高并发

  • 了解内容:除了Dubbo服务暴露协议,Dubbo框架还支持另外七种服务暴露协议,Hessian协议,Http协议,RMI协议,WebService协议,THrift协议,Memcached协议,Redis协议,在实际中使用最多的就是Dubbo服务暴露协议

服务暴露协议用法

下面我们以Dubbo服务暴露协议作为列子来说明服务暴露协议的用法

  1. 在服务的提供者的Spring配置文件中注册服务暴露协议,

  2. 然后在暴露服务时具体指定所使用的已经被注册的暴露协议

    

二、同一服务支持多种协议(修改服务提供者的配置文件)

  

三、不同服务使用不同的协议(修改服务提供者的配置文件)

  

牛啃南瓜知道怎么啃就行,这里我就没做过多的演示

Dubbo的高级设置以及使用建议

在Provider上尽量多的配置Consumer端的属性

使得Provider实现着一开始就考虑到Provider的服务特点、服务质量等问题,因为作为服务的提供者比服务的消费者更加清楚服务的性能参数,如调用的超时时间,合理的重试次数等,在Provider配置后,Consumer不配置则会默认使用Provider端的配置值,如果Consumer没有配置,Provider也没有配置,就会使用Consumer端的全局设置,这对于Provider而言是不可控的,也是不合理的

  

粒度到可以针对某一个服务也可以针对服务的同时针对某一个方法(hello方法)

  • timeout:远程服务调用超时的时限

  • retries:失败重试次数,默认为2

  • loadbalance:负载均衡算法,默认是随机random,还可以选择轮询(roundrobin)、最不活跃优先(leastactive)等

  • actives:消费者最大并发调用限制,达到上限后,新的调用会被阻塞直到超时,0表示不限制

Provider端配置合理的Provider端属性

  

threads:用于指定服务的线程池大小

executes:一个服务并行执行的请求上限,超过上限,新请求肯定被阻塞,可能阻塞到超时,该属性在<dubbo:method/>则是针对指定的方法,配置在<dubbo:service />上则是针对整个服务

常用性能调优参数(来自网络)

参数名作用范围默认值说明备注
threadsprovider200业务处理线程池大小 
iothreadsproviderCPU+1io线程池大小 
queuesprovider0

线程池队列大小,当线程池满时,排队等待执行的队列大小,

建议不要设置,当线程程池时应立即失败,

重试其它服务提供机器,而不是排队,除非有特殊需求

 
connectionsconsumer0

对每个提供者的最大连接数,

rmi、http、hessian等短连接协议表示限制连接数,

Dubbo等长连接协表示建立的长连接个数

Dubbo协议默认共享一个长连接
activesconsumer0每服务消费者每服务每方法最大并发调用数0表示不限制
acceptesprovider0服务提供方最大可接受连接数0表示不限制
executesprovider0服务提供者每服务每方法最大可并行执行请求数0表示不限制

转载于:https://www.cnblogs.com/msi-chen/p/11094581.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值