2012-05-15 73 views
4

我正在評估Hazelcast作爲我正在處理的應用程序的分佈式數據網格解決方案。 Hazelcast是一個分佈式的集羣上安裝和我的應用程序使用了Spring這樣定義一個Hazelcast客戶端:使用MapLoader在客戶端內使用Hazelcast分佈式地圖

<hz:client id="hazelcastClient" group-name="dev" group-password="dev-pass"> 
    <hz:member>localhost:5701</hz:member> 
</hz:client> 

在我Hazelcast節點,在hazelcast.xml文件我設置的地圖,所有的配置需要。假設這張地圖叫做myMap。使用Hazelcast webapp進行監控時(mancenter),我可以正確設置此地圖。

我現在已經配置了映射,以便在應用程序端注入我的bean。如果我做類似的東西

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" /> 

而且我注入這個映射到我的bean包含提取邏輯,我沒有任何問題。

但是,我也寫了一個類來實現MapLoader接口,以便處理來自緩存的缺失數據。我現在的問題是,我不知道如何將這個Maploader綁定到我定義的緩存。如果我嘗試類似

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap"> 
    <hz:map-store enabled="true" implementation="myMapLoader"/> 
</hz:map> 

我發現了一個XML解析錯誤,因爲它似乎是,當hz:map作爲頂級元素(而不是hz:config內部,例如),你不能指定內元素。這讓我覺得你需要定義一個hz:config元素。但是,如果您可以爲客戶定義hz:config元素,那麼從文檔中就不太清楚。對我來說,如果您希望您的應用程序成爲羣集的一部分,似乎您需要使用hz:config。但我不確定,如果我的應用程序應該是羣集的一部分,這在邏輯上是正確的 - 它基本上是數據網格的客戶端。

對於如何配置我的應用程序以實現我想要的行爲,您有任何想法嗎?

謝謝!

回答

13

不能在客戶端配置一張地圖。您應該在Hazelcast節點上配置myMap及其MapLoader/MapStore。 MapStore/MapLoader操作由擁有數據的Hazelcast節點執行,而不是由客戶端執行。

Hazelcast節點

<hz:config> 
    ... 
    <hz:map name="myMap" backup-count="1" max-size="0"> 
     <hz:map-store enabled="true" implementation="myMapLoader" /> 
    </hz:map> 
    ... 
</hz:config> 

-OR-使用hazelcast.xml

<map name="myMap"> 
    <backup-count>1</backup-count> 
    <time-to-live-seconds>0</time-to-live-seconds> 
    <max-idle-seconds>0</max-idle-seconds> 

    <map-store enabled="true"> 
     <class-name>foo.bar.MyMapLoader</class-name> 
     <write-delay-seconds>0</write-delay-seconds> 
    </map-store> 
</map> 

在客戶端側只是實例myMap;

<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" /> 

當客戶把從該圖/獲得,該節點處理客戶端的請求會調用MapLoader/MapStore。

相關問題