2010-12-13 8 views
0

自分自身を識別するために一意のIDを送信するバッチWebサービスを消費する必要があります。その後、サービスは一意の応答IDを返します。私が必要とする情報。 一般的に、レスポンスIDを追跡し、後で実際の応答を得るためにサービスを再度呼び出す良い方法はありますか?非同期Webサービスを消費する一般的なJavaの設計

答えて

0

簡単な解決策は、IDとタイムスタンプを1つのマップ*またはリストにしてから、特定の年齢より古いすべてのIDを起動して処理する別のスレッドにループを設定することです。 (マップやリストがスレッドセーフであることを確認してください)しかし、アプリがダウンして再起動されると、保留中のリクエストが追跡されなくなります。そのケースを処理する必要がある場合は、データベースを使用します。

* 特定の解決策の1つは、タイムスタンプでキーが付けられたSortedMapを使用することです。すべてのタイムスタンプが一意であることを確認して、1ミリ秒に1つ以上の要素をマップに入れないことを期待する必要があります。次に、IDをマップに配置するには、タイムスタンプをSystem.currentTimeMillis()にし、タイムスタンプはすでにマップ内のキーである間にインクリメントします。次に、(タイムスタンプ、ID)のペアをSortedMapに配置します。ループスレッドは、最初からSortedMapの要素を最初から読み込んでから新しくなるまで停止してから停止することができます。なぜなら、最も古い要素はすべてマップの先頭にあるからです。