Dubbo 通过 Filter 拦截器机制,内置了并发控制策略实现。限制从同一客户端到同一服务的并发请求数,防止恶意请求使服务器过载,确保服务的稳定性,并防止使用过多资源。
限制 com.foo.BarService
的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个
XML 方式:
<dubbo:service interface="com.foo.BarService" executes="10" />
注解方式:
@DubboService(executes=10)
private DemoServiceImpl implements DemoService{}
限制 com.foo.BarService
的 sayHello
方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个
XML 方式:
<dubbo:service interface="com.foo.BarService">
<dubbo:method name="sayHello" executes="10" />
</dubbo:service>
注解方式:
@DubboService(executes=10, methods = {@Method(name="sayHello",executes=10)})
private DemoServiceImpl implements DemoService{}
限制 com.foo.BarService
的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个
XML 方式:
<dubbo:service interface="com.foo.BarService" actives="10" />
注解方式:
@DubboReference(actives=10)
private DemoService demoService;
限制 com.foo.BarService
的 sayHello
方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个
XML 方式:
<dubbo:service interface="com.foo.BarService">
<dubbo:method name="sayHello" actives="10" />
</dubbo:service>
注解方式:
@DubboReference(actives=10, methods = {@Method(name="sayHello",executes=10)})
private DemoService demoService;
如果提供端
@DubboService
和消费端@DubboReference
都配了 actives,则消费端配置值优先级更高,参见:配置的覆盖策略。
配置服务的客户端的 loadbalance
属性为 leastactive
,此 Loadbalance 会调用并发数最小的 Provider(Consumer端并发数)。
<dubbo:reference interface="com.foo.BarService" loadbalance="leastactive" />
或
<dubbo:service interface="com.foo.BarService" loadbalance="leastactive" />