Jboss 大黄蜂Q中是否可能有多个客户?

Jboss 大黄蜂Q中是否可能有多个客户?,jboss,jms,hornetq,Jboss,Jms,Hornetq,在我的客户机应用程序中,我创建了几个使用者,但他们不能同时处理队列。通常,只有一个使用者处理队列消息。我不知道为什么 Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.URL_PKG_PREFI

在我的客户机应用程序中,我创建了几个使用者,但他们不能同时处理队列。通常,只有一个使用者处理队列消息。我不知道为什么

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);
}
Hashtable env=new Hashtable();
put(Context.INITIAL_Context_FACTORY,“org.jnp.interfaces.NamingContextFactory”);
put(Context.URL_PKG_前缀,“org.jboss.naming:org.jnp.interfaces”);
环境投入(Context.PROVIDER_URL,“192.168.1.111:1099”);
InitialContext ctx=新的InitialContext(env);
ConnectionFactory cf=(ConnectionFactory)ctx.lookup(“/ConnectionFactory”);
Queue downQueue=(Queue)ctx.lookup(“Queue/downQueue”);
会话consumerSession=conn.createSession(false,Session.CLIENT\u确认);
信息消费者;
对于(int i=0;i<2;i++){
consumer=consumerSession.createConsumer(下行队列,“proxyId=0”);
consumer.setMessageListener(listener);
}

如何处理具有多个并发使用者的队列?

将其视为线程和会话之间的1:1。(连接是线程安全的,“下面”的所有内容都不是)。因此,简而言之,创建多个线程,让每个线程创建一个会话等,每个线程都将使用。

通过查看您的代码,
使用者
变量在for循环中重新分配了不同的使用者对象,这可能会导致对早期使用者对象的引用丢失和垃圾收集。只有一个consumer对象将保持活动状态,即在for循环中最后创建的对象,它的引用由
consumer
变量维护,并且它将使用所有即将到来的消息