Dubbo延遲暴露、併發控制、連接控制、延遲連接、粘滯連接(十)

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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章