1、参考
延迟暴露:http://dubbo.apache.org/zh-cn/docs/user/demos/delay-publish.html
并发控制:http://dubbo.apache.org/en-us/docs/user/demos/concurrency-control.html
连接控制:http://dubbo.apache.org/en-us/docs/user/demos/config-connections.html
延迟连接:http://dubbo.apache.org/en-us/docs/user/demos/lazy-connect.html
粘滞连接:http://dubbo.apache.org/en-us/docs/user/demos/stickiness.html
2、延迟暴露
Dubbo在解析到<dubbo:service />时就会打开端口对外提供服务,有些服务需要一定的预热时间,比如初始化缓存,等待相关资源就位等,如果此时请求进来,则会报错。
Dubbo-2.6.5 之前版本
<dubbo:service delay="-1" />
延迟到spring完成初始化之后。
<dubbo:service delay="5000" />
Spring初始化之后再延长5S。
Dubbo-2.6.5 及以后版本
这个版本之后,所有的服务都在Spring完成初始之后对外暴露,这是默认的。
3、并发控制
示例1
控制接口中所有方法的并发个数:
<dubbo:service interface="com.foo.BarService" executes="10" />
意思应该是这个接口下边全部的方法累积,全部并发不能超过10。
示例2
控制接口中某个特定的方法,并发个数不能超过10:
<dubbo:service interface="com.foo.BarService">
<dubbo:method name="sayHello" executes="10" />
</dubbo:service>
示例3
限制Consumer端接口:
<dubbo:reference interface="com.foo.BarService" actives="10" />
示例4
限制Consumer端某个接口中的具体方法:
<dubbo:reference interface="com.foo.BarService">
<dubbo:method name="sayHello" actives="10" />
</dubbo:service>
4、连接控制
来自Provider端限制
<dubbo:provider protocol="dubbo" accepts="10" />
或者:
<dubbo:protocol name="dubbo" accepts="10" />
从文档上看,不知道这个配置是针对整个Provider,还是针对Provider中的每一个服务。也不知道是单个Consumer不超过10还是所有Consumer不超过10。
来自客户端的限制:
<dubbo:reference interface="com.foo.BarService" connections="10" />
或者:
<dubbo:service interface="com.foo.BarService" connections="10" />
如果<dubbo:service>
和<dubbo:reference>
都配了 connections,<dubbo:reference>
优先,参见:配置的覆盖策略。
官网这句话真让人搞不懂。dubbo:service是Provider端自己的限制,dubbo:reference是Consumer端自己的限制。双方各自限制自己可以使用的连接数。现在这两个不相干的东西可以覆盖,真搞不明白这个连接限制到底在限制谁。看文档越看越糊涂。5、
5、延迟连接
延迟连接用于减少长连接数。当有调用发起时,再创建长连接,只对长连接类型有效:
<dubbo:protocol name="dubbo" lazy="true" />
6、粘滞连接
粘滞连接用于有状态服务,尽可能让Consumer连接相同的Provider,除非Provider挂掉。
很明显在这种情况下,负载均衡策略将失效,并且粘滞连接将自动开启延迟连接,以减少长连接的个数。配置如下:
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" sticky="true" />
沾滞连接可以精确到方法级别:
<dubbo:reference id="xxxService" interface="com.xxx.XxxService">
<dubbo:mothod name="sayHello" sticky="true" />
</dubbo:reference>