2016-04-25 57 views
0

我是Hazelcast的新手,在我看來,我掙扎着一個非常簡單的問題,但無法解決它。我有這種情況下,我有2個Web服務,其中在一個服務器(第1個API)我必須得到一個值,將在5秒後從不同的服務器使用第二個API填充,我只有一個兩臺服務器之間的referenceId用於標識/獲取/填充值。換句話說,當我的第一個API和ID一起被調用時,它將返回被推送到第二個API的ID。從地圖得到一個值,一旦它充滿了Hazelcast

此圖顯示了更好,我想通過連接第一和第二API來解決一下: enter image description here

所以,我已經使用了IMAP,做一個「讓」與「放」是這樣的:

//- First API -// 
Integer referenceId = XXXX; // coming in the step 2 
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap"); 

Thread.sleep(5000); // Sleep here does the trick but it's the worst performance 
String strResponse = map.get(referenceId); 

。另一方面,其他服務器將會把數據後可達5秒這樣的:

//- Second API -// 
String refId = captureRefId(YYYY) 
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap"); 
map.put(refId, YYYY); 

這樣做的問題是,地圖.get返回值始終爲空,因爲此時不存在該值,但如果我添加sleep(5),則一切正常。

我的問題是,我怎麼能做到map.get(referenceId)被阻止,直到其他服務器填充該特定ID的地圖?有沒有比使用IMap更好的選擇?

+0

有沒有輪詢循環,幾毫秒的等待時間,解決這個問題?不知道我完全理解你的問題。 IMap沒有這樣的阻塞操作,也許IQueue會更好地解決它,但這取決於你真正想要達到的目標。也許你可以進一步闡述。 – noctarius

+0

@noctarius感謝您的評論。我用圖表更新了我的問題。它顯示了更好的問題,我希望有'1st API'等待'2nd API'被執行並填充數據。 –

+0

仍然不輪詢解決問題?作爲替代方案,地圖監聽器? – noctarius

回答

相關問題