问题描述
|
在我的客户端应用程序中,我创建了几个使用者,但是它们不能同时处理队列。始终,只有一个使用者处理队列消息。我不知道为什么。
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,\"org.jnp.interfaces.NamingContextFactory\");
env.put(Context.URL_PKG_PREFIXES,\"org.jboss.naming:org.jnp.interfaces\");
env.put(Context.PROVIDER_URL,\"192.168.1.111:1099\");
InitialContext ctx = new InitialContext(env);
ConnectionFactory cf = (ConnectionFactory) ctx.lookup(\"/ConnectionFactory\");
Queue downQueue = (Queue) ctx.lookup(\"queue/DownQueue\");
Session consumerSession = conn.createSession(false,Session.CLIENT_ACKNowLEDGE);
MessageConsumer consumer;
for (int i = 0; i < 2; i++) {
consumer = consumerSession.createConsumer(downQueue,\"proxyId=0\");
consumer.setMessageListener(listener);
}
如何处理具有多个并发使用者的队列?
解决方法
将其视为线程和会话之间的1比1。 (连接是线程安全的,“以下”的所有内容都不是)。简而言之,创建多个线程,让每个线程创建一个会话等。每个线程都会消耗。
, 通过查看您的代码,“ 1”变量将在for循环中重新分配不同的使用者对象,这可能导致对早期使用者对象的引用丢失并被垃圾回收。只有一个使用者对象将保持活动状态-在for循环中最后一个创建的对象-其引用由
consumer
变量维护,它将使用所有即将到来的消息。