【问题标题】:Are multiple client consumers possible in hornetq?hornetq 中是否可以有多个客户端消费者?
【发布时间】:2011-09-14 08:28:06
【问题描述】:

在我的客户端应用程序中,我创建了多个消费者,但他们无法同时处理队列。始终,只有一个消费者处理队列消息。我不知道为什么。

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);
}

如何处理具有多个并发消费者的队列?

【问题讨论】:

    标签: jboss jms hornetq


    【解决方案1】:

    将其视为线程和会话之间的 1 对 1。 (连接是线程安全的,“下面”的一切都不是)。所以简而言之,创建多个线程,让每个线程创建一个会话等。每个线程都会消耗。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 2014-05-30
        相关资源
        最近更新 更多