2016-08-10 64 views
0

我有一個hazelcast集羣,它爲命令行觸發的java客戶端執行若干計算。當節點仍在工作時,我需要在客戶端系統上保留部分計算結果。我將把部分數據存儲在Hazelcasts地圖中。現在我正在尋找一種方法來通知客戶端節點已將數據存儲在地圖中,並且他可以開始使用它。有沒有辦法從任何榛節點觸發客戶端操作?從Hazelcast節點聯繫Java客戶端

+0

你可以發佈一些代碼,顯示你試圖實現什麼? – noscreenname

+0

是的,請查閱'MapStore',也許它可以幫助嗎? – vikingsteve

回答

0

你的問題不是很清楚,但看起來你可以使用com.hazelcast.core.EntryListener來觸發一個回調,當數據映射中存儲新條目時,會通知客戶端。

+0

我的問題發佈幾分鐘後,我偶然發現了這個功能。它看起來正是我所需要的。我會在測試環境中嘗試它,並在此處發佈代碼或詢問更多問題。謝謝。 – vitsja

0

您的成員節點可以向Hazelcast IQueueITopicRingBuffer發佈一些中間結果(或只是通知消息)。 流程如下所示。

  1. 客戶端爲rignbuffer註冊偵聽器。
  2. 客戶端提交命令在羣集上執行。
  3. 成員將中間結果保留爲IMaps或任何其他數據結構
  4. 成員向主題發送有關部分結果可用性的消息。
  5. 客戶端收到消息並訪問IMap中的數據。
  6. 成員會在完成任務後發送消息。

就是這樣的。 你可以找到一些例子here

讓我知道你是否有任何問題。

乾杯,

維克

0

有幾種途徑來解決這個問題。最簡單的就是使用專用的IMap或Hazelcasts的任何其他同步收藏。人們可以簡單地在這樣的地圖中寫入數據,並在添加之後檢索/刪除數據。但是這會造成巨大的開銷,因爲數據必須在整個集羣中同步。如果數據量很大,並且集羣規模龐大,遍佈全球或至少美國的數百個節點,則數據將在所有節點上同步,以便稍後進行刪除,這也必須進行同步。不刪除是不行的,因爲數據可能會有幾個大的數據,這會使數據的同步更加昂貴。問題得到了解答,但解決方案並不適用於所有情況。