スタンドアロン アプリケーションで (いくつかの jms トピック用に) メッセージ リスナーを作成する必要がありました。受信した各メッセージは何らかの処理を行う必要があるためです。
この振る舞いは私のパフォーマンス全体を遅らせます。
そこで、メッセージ リスナーに一種の POOL を作成することにしました。(ejb の MDB のように)。
私はこのようにExecutorクラス(Java)を使い始めました:
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
private Executor threadPool = Executors.newCachedThreadPool();
@Override
public void onMessage(final Message msg)
{
Runnable t = new Runnable()
{
public void run()
{
execute(msg);
log.trace(received messge");
}
};
threadPool.execute(t);
}
public void execute(Message msg)
{
// do some long running process)
}
このようにして、実行ごとに個別のスレッドを作成することにより、処理中にアプリケーションがメッセージから別のメッセージにスタックしないようにします。
私はあなたの経験からあなたの提案をしたいと思います..実装が将来問題を引き起こす可能性がある場合、その種類はありますか? 何に注意する必要がありますか(同時実行性が問題であることはわかっています)?