我是Hazelcast的新手,在我看來,我掙扎着一個非常簡單的問題,但無法解決它。我有這種情況下,我有2個Web服務,其中在一個服務器(第1個API)我必須得到一個值,將在5秒後從不同的服務器使用第二個API填充,我只有一個兩臺服務器之間的referenceId用於標識/獲取/填充值。換句話說,當我的第一個API和ID一起被調用時,它將返回被推送到第二個API的ID。從地圖得到一個值,一旦它充滿了Hazelcast
所以,我已經使用了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更好的選擇?
有沒有輪詢循環,幾毫秒的等待時間,解決這個問題?不知道我完全理解你的問題。 IMap沒有這樣的阻塞操作,也許IQueue會更好地解決它,但這取決於你真正想要達到的目標。也許你可以進一步闡述。 – noctarius
@noctarius感謝您的評論。我用圖表更新了我的問題。它顯示了更好的問題,我希望有'1st API'等待'2nd API'被執行並填充數據。 –
仍然不輪詢解決問題?作爲替代方案,地圖監聽器? – noctarius