Dubbo剖析-并发控制

Posted 技术原始积累

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo剖析-并发控制相关的知识,希望对你有一定的参考价值。

一、前言

前面讲解了Dubbo的服务降级,本节我们来讲解dubbo中的并发控制,并发控制分为客户端并发控制和服务端并发控制。

二、并发控制

2.1 客户端并发控制

在服务消费方法进行并发控制需要设置actives参数,如下:

设置com.test.UserServiceBo接口中所有方法,每个方法最多同时并发请求10个请求。

也可以使用下面方法设置接口中的单个方法的并发请求个数,如下:

Dubbo剖析-并发控制

如上设置sayHello方法的并发请求数量最大为10,如果客户端请求该方法并发超过了10则客户端会被阻塞,等客户端并发请求数量少于10的时候,该请求才会被发送到服务提供方服务器。在dubbo中客户端并发控制是使用ActiveLimitFilter过滤器来控制的,代码如下:

Dubbo剖析-并发控制

可知客户端并发控制,是如果当并发量达到指定值后,当前客户端请求线程会被挂起,如果在等待超时期间并发请求量少了,那么阻塞的线程会被激活,然后发送请求到服务提供方,如果等待超时了,则直接抛出异常,这时候服务根本都没有发送到服务提供方服务器。

2.2 服务端并发控制

在服务提供方进行并发控制需要设置executes参数,如下:

Dubbo剖析-并发控制

设置com.test.UserServiceBo接口中所有方法,每个方法最多同时并发处理10个请求,这里并发是指同时在处理10个请求。

也可以使用下面方法设置接口中的单个方法的并发处理个数,如下:

如上设置sayHello方法的并发处理数量为10.

需要注意的是,服务提供方设置并发数量后,如果同时请求数量大于了设置的executes的值,则会抛出异常,而不是像消费端设置actives时候,会等待。服务提供方并发控制是使用ExecuteLimitFilter过滤器实现的,ExecuteLimitFilter代码如下:

所以当使用executes参数时候要注意,当并发量过大时候,多余的请求会失败。

三、总结

本节我们讲解了dubbo中客户端并发控制和服务端并发控制。另外想系统学dubbo的童鞋可以 单击 下发 阅读原文


以上是关于Dubbo剖析-并发控制的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo 是如何控制并发数和限流的?

dubbo是如何控制并发数和限流的?

SQLite剖析之锁和并发控制

Dubbo3高级特性「框架与服务」服务并发控制及集群负载均衡的实践指南(含扩展SPI)

并发控制 executes

深入剖析Mysql事务和Spring事务