2016-08-12 10 views
0

Springを使用して残りのAPIを使用してアプリケーションを構築しています。休止APIメソッドがキューに空きがあるときに待機するバックグラウンドワーカースレッドと、空になっていないときにタスクを1つずつ実行するタスク(単なるオブジェクト)を追加する可能性が必要です。タスクを1つずつ実行することは絶対に必要で、1秒から数分かかることがあります。待機する必要はありません。残りのAPIを介して結果を送信する必要はありません。タスクが完了したという情報のみです。backgorundワーカースレッドを使用したSpring Rest APIアプリケーション

基本的に私のアイデアは、どのようにコード化するのではなく、これは並行性パッケージとエグゼキュータ...):

public class Worker implements Runnable { 

    private Queue<...> queue; 

    public addTask(... task) { 
     this.queue.add(task); 
     this.notify(); 
    } 

    @Override 
    public void run(){ 
     check task queue 
      - wait() if empty 
      - execute task if not empty 
    } 

} 

私は春との組み合わせで試したことはありません。

私はいくつかのJavaの知識がありますが、私はすでにいくつかのデスクトップアプリケーションを並行性を使用して作成していますが、春の経験はないので、正しい方向を指すだけです。

これは非同期メソッド(@Async)を使用して行うことができますか?または定期的にキューをチェックする同期スレッド(コンポーネント)を作成することは許容されますか?

ありがとうございました。

答えて

0

あなたはBlockingQueueの https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html

を使用してこれを行うことができます私はあなたのシステムの制約についてはよく分からないんだけど、埋め込まれたキューでの解決策は非常によくスケールアウトしません。サービスが制約を受ける場合は、複数のインスタンスを実行する必要があります.1つのサーバーへの呼び出しに、他のサーバーへの呼び出しに時間がかかる場合があります。

あなたは春との組み合わせでこれを実行しようとしている場合、あなたはあなたの労働者とあなたのコントローラ

+0

に注入できるように、ビーンとしてのBlockingQueueを作成する必要があります[OK]を、これは実際に参考になっおかげで、しかし、事あります私は、そのキュー(または他のもの)から取る(または保持する)ワーカースレッドを作成する必要があります。たぶん私は他の人のために私の質問を明確にしていないし、それをrewiteする必要がありますか? – YoungPetr

関連する問題