【问题标题】:JMS onMessage JBoss, how many threads are used?JMS onMessage JBoss,用了多少线程?
【发布时间】:2014-07-30 18:36:27
【问题描述】:

我有一个 JMS 侦听器,在侦听器内部,我使用 ExecutorService 在固定数量的线程上运行工作程序。像这样:

public void onMessage(Message m) {
    executor.execute(new Worker(m));
}

这个执行程序有 10 个线程,如果我同时收到 100 条消息,并且每个工作线程运行需要几秒钟,我是否会有 90 个 JBoss JMS 线程在 10 个活动工作线程上等待?那么这些传入消息中的每一个是否都有自己的线程并在等待时占用我的资源?

我做错了吗,有没有更好的方法?

我正在使用 JBoss EAP 和 HornetQ

【问题讨论】:

    标签: java jboss jms


    【解决方案1】:

    您不需要 Executor,每个 MDB 都在自己的线程中运行。您可以控制可以将消息传递到此 MDB 的最小和最大会话数。请参阅How to limit the number of MDB instances listening to a Jboss JMS queue。 因此,在您的场景中,您可以像这样定义 MDB:

    @MessageDriven(activationConfig = {   
    @ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue" ),   
    @ActivationConfigProperty( propertyName = "destination", propertyValue = "queue/myQueue"),
    @ActivationConfigProperty( propertyName = "maxSession", propertyValue = "20")  
    })
    public class MyBean implements MessageListener {
      public void onMessage(Message m) {
        // do something with message
      }
    }
    

    如果有 100 条消息在队列中等待,则处理前 20 条消息,其余消息在队列中等待。随着处理一条消息(并从队列中删除),处理下一条消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 2012-06-12
      相关资源
      最近更新 更多