ハゼルキャストを初めて使っていて、私の意見ではかなり簡単な問題ですが、解決できませんでした。ハゼルキャストでいっぱいになったらマップから値を取得
私は2番目のAPIを使用して別のサーバーから5秒後に値を取得する必要がある1つのサーバー(1番目のAPI)の2つのWebサービスを持っています。値を識別/取得/投入するために両方のサーバー間のreferenceId。言い換えれば、私の1番目のApiがIDで呼び出されると、そのIDを持つ2番目のApiにプッシュされたものが返されます。
この図は、私が第一と第二のAPIを接続することによって解決したいものをよりよく示しています
だから、私は、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はその時点で値が存在しないので常にnullを返しますが、もし私がsleep(5)
を追加すると、すべて正常に動作します。
私の質問は、map.get(referenceId)
を他のサーバーがその特定のIDでマップに移入するまでブロックするにはどうすればよいですか? IMapを使うよりも良い選択肢がありますか?
ポーリングループは数ミリ秒の待ち時間で問題を解決できませんか?私はあなたの質問/問題を完全に理解しているかどうかはわかりません。 IMapにはこのようなブロッキング操作がありません。おそらくIQueueはそれをより良く解決しますが、実際に達成したいことに依存します。たぶんあなたはもっと詳しく説明することができます。あなたのコメントのために@noctariusありがとう – noctarius
私はダイアグラムで質問を更新しました。私の第二のAPIが実行されるのを待っている第一のAPIを持ち、そのデータを移植したいという私の問題をより良く示す。 –
まだ、ポーリングは問題を解決していませんか?代わりに、マップリスナー? – noctarius