hornetq中可能有多个客户消费者吗?

问题描述

| 在我的客户端应用程序中,我创建了几个使用者,但是它们不能同时处理队列。始终,只有一个使用者处理队列消息。我不知道为什么。
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
变量维护,它将使用所有即将到来的消息。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...