1、參考
延遲暴露:http://dubbo.apache.org/zh-cn/docs/user/demos/delay-publish.html
併發控制:http://dubbo.apache.org/en-us/docs/user/demos/concurrency-control.html
連接控制:http://dubbo.apache.org/en-us/docs/user/demos/config-connections.html
延遲連接:http://dubbo.apache.org/en-us/docs/user/demos/lazy-connect.html
粘滯連接:http://dubbo.apache.org/en-us/docs/user/demos/stickiness.html
2、延遲暴露
Dubbo在解析到<dubbo:service />時就會打開端口對外提供服務,有些服務需要一定的預熱時間,比如初始化緩存,等待相關資源就位等,如果此時請求進來,則會報錯。
Dubbo-2.6.5 之前版本
<dubbo:service delay="-1" />
延遲到spring完成初始化之後。
<dubbo:service delay="5000" />
Spring初始化之後再延長5S。
Dubbo-2.6.5 及以後版本
這個版本之後,所有的服務都在Spring完成初始之後對外暴露,這是默認的。
3、併發控制
示例1
控制接口中所有方法的併發個數:
<dubbo:service interface="com.foo.BarService" executes="10" />
意思應該是這個接口下邊全部的方法累積,全部併發不能超過10。
示例2
控制接口中某個特定的方法,併發個數不能超過10:
<dubbo:service interface="com.foo.BarService">
<dubbo:method name="sayHello" executes="10" />
</dubbo:service>
示例3
限制Consumer端接口:
<dubbo:reference interface="com.foo.BarService" actives="10" />
示例4
限制Consumer端某個接口中的具體方法:
<dubbo:reference interface="com.foo.BarService">
<dubbo:method name="sayHello" actives="10" />
</dubbo:service>
4、連接控制
來自Provider端限制
<dubbo:provider protocol="dubbo" accepts="10" />
或者:
<dubbo:protocol name="dubbo" accepts="10" />
從文檔上看,不知道這個配置是針對整個Provider,還是針對Provider中的每一個服務。也不知道是單個Consumer不超過10還是所有Consumer不超過10。
來自客戶端的限制:
<dubbo:reference interface="com.foo.BarService" connections="10" />
或者:
<dubbo:service interface="com.foo.BarService" connections="10" />
如果 <dubbo:service>
和 <dubbo:reference>
都配了 connections,<dubbo:reference>
優先,參見:配置的覆蓋策略。
官網這句話真讓人搞不懂。dubbo:service是Provider端自己的限制,dubbo:reference是Consumer端自己的限制。雙方各自限制自己可以使用的連接數。現在這兩個不相干的東西可以覆蓋,真搞不明白這個連接限制到底在限制誰。看文檔越看越糊塗。5、
5、延遲連接
延遲連接用於減少長連接數。當有調用發起時,再創建長連接,只對長連接類型有效:
<dubbo:protocol name="dubbo" lazy="true" />
6、粘滯連接
粘滯連接用於有狀態服務,儘可能讓Consumer連接相同的Provider,除非Provider掛掉。
很明顯在這種情況下,負載均衡策略將失效,並且粘滯連接將自動開啓延遲連接,以減少長連接的個數。配置如下:
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" sticky="true" />
沾滯連接可以精確到方法級別:
<dubbo:reference id="xxxService" interface="com.xxx.XxxService">
<dubbo:mothod name="sayHello" sticky="true" />
</dubbo:reference>