目录
并发控制
- 使用场景
限制服务的方法在服务器端占用线程池线程数的数量。
- 配置
(1)限制BarService的每个方法,服务器端并发执行数不能超过10个
<dubbo:service interface="com.foo.BarService" executes="10" />
(2)限制BarService的sayHello方法,服务器端并发执行数不能超过10个
<dubbo:service interface="com.foo.BarService>
<dubbo:method name="sayHello" executes="10" />
</dubbo:service>
(3)限制BarService的每个方法,每个客户端并发执行(或占用连接的请求数)不能超过10个
<dubbo:service interface="com.foo.BarService" actives="10" />
或者
<dubbo:reference interface="com.foo.BarService" actives="10" />
(4)限制com.foo.BarService的sayHello方法,每个客户端并发执行(或占用连接的请求数)不能超过10个
<dubbo:service interface="com.foo.BarService>
<dubbo:method name="sayHello" actives="10" />
</dubbo:service>
或者
<dubbo:reference interface="com.foo.BarService>
<dubbo:method name="sayHello" actives="10" />
</dubbo:reference>
- 注意
如果<dubbo:service>和<dubbo:reference>都配了actives,<dubbo:reference>优先。
使用actives配置时,如上设置sayHello方法的并发请求数量最大为10,如果客户端请求该方法并发超过了10则客户端会被阻塞,等客户端并发请求数量少于10的时候,该请求才会被发送到服务提供方服务器。在dubbo中客户端并发控制是使用ActiveLimitFilter过滤器来
控制的。源码详情请点击:actives过滤器
使用executes时,服务提供方设置并发数量,如果同时请求数量大于了设置的executes的值,则会抛出异常,而不是像消费端设置actives时候,会等待。服务提供方并发控制是使用ExecuteLimitFilter过滤器实现的。源码详情请点击:executes过滤器
连接控制
- 使用场景
限制服务器端接受的连接数。
(1)限制服务器接收的连接不能超过10个:
<dubbo:provider protocal="dubbo" accepts="10" />
<dubbo:protocol name="dubbo" accepts="10" />
(2)限制客户端服务使用连接数:
<dubbo:referece interface="com.foo.BarService" connections="10" />
或者
<dubbo:service inteterface="com.foo.BarService" connections="10" />
- 注意
如果<dubbo:service>和<dubbo:reference>都配置了connections,<dubbo:reference>优先。
延迟连接
- 使用场景
用于减少长连接数,当有调用发起时,再创建长连接。只对使用长连接的dubbo协议生效。
<dubbo:protocol name="dubbo" lazy="true" />
粘滞连接
- 使用场景
用于有状态服务,尽可能让客户端总是向同一提供者发起调用,除非该提供者挂了,再连接另一台。粘滞连接将自动开启延迟连接,以减少长连接数。
<dubbo:protocol name="dubbo" sticky="true" />