我是从dubbo的官网说明,找到的github下载源码的地址:https://github.com/apache/dubbo.git

在这个模块下,找到一个提供方和消费方demo运行:

dubbo2.7.2线程模型配置问题_提供方

我本来只是想看一下源码的异步调用的实现方案,因为之前对dubbo可能也不是特别的了解,在配置线程模型的时候,遇到了一个问题。如下:

官网给的配置方式:线程模型

dubbo2.7.2线程模型配置问题_threadpool_02

我配置在消费方,发现不起作用:dispatcher属性、threadpool属性、threads属性。

关于dispathcer可以查看线程模型介绍。

我对源码进行了下debug查看源码实现以及一些相关测试,结果如下:

提供方,默认dispatcher:all,threadpool:fixed。

提供方支持配置线程模型这几个属性的标签是:

<dubbo:provider />
<dubbo:protocol />

上面这两个标签都支持配置dispatcher、threadpool相关属性。

消费方,默认threadpool:cached

消费方的dispatcher的值是和订阅的提供方的服务的dispatcher的值一样。

所以消费方配置threadpool相关属性的标签是:

<dubbo:consumer />

<dubbo:protocol />标签可不支持。

我对dubbo的原理和实现还没怎么研究过,所以了解的也有限,根据官方线程模型这里的说明 ,dispathcer是根据提供方的处理能力来看什么时候使用及哪种线程模型合适。

如下图:

dubbo2.7.2线程模型配置问题_dispatcher_03

消费端并没有体现需要使用dispathcer。源码中消费端url的dispatcher属性应当是来源于订阅的提供方的url。