目錄
併發控制
- 使用場景
限制服務的方法在服務器端佔用線程池線程數的數量。
- 配置
(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" />