我不得不在一个独立的应用程序中创建一个消息监听器(对于一些 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)
}
通过这种方式,我通过为每次执行创建单独的线程来确保我的应用程序在处理时不会从一条消息卡到另一条消息。
我想根据您的经验提出您的建议。如果实施可能会导致将来出现任何问题,那是那种吗?我应该注意什么(我知道并发是一个问题)?