首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JBoss只创建一个ActiveMQ使用者?

为什么JBoss只创建一个ActiveMQ使用者?
EN

Stack Overflow用户
提问于 2019-06-27 11:56:37
回答 1查看 772关注 0票数 1

为什么JBoss EAP 7只使用Active MQ(而不是Artemis)创建一个消费者?如何增加消费者的数量?

我试过:

  • 增加maxSession ActivationConfigProperty
  • 增加mdb池大小(通过bean-instance-pools标签)
  • connection-definition标签中设置最小/最大池大小

我的配置:

mdb-池配置

代码语言:javascript
复制
<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
...
<mdb>
    <resource-adapter-ref resource-adapter-name="com.icl.amq.jmsra.rar"/>
    <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
<pools>
    <bean-instance-pools>
        <strict-max-pool name="slsb-strict-max-pool" max-pool-size="5" instance-acquisition-timeout="10" instance-acquisition-timeout-unit="MINUTES"/>
        <strict-max-pool name="mdb-strict-max-pool" max-pool-size="40" instance-acquisition-timeout="10" instance-acquisition-timeout-unit="MINUTES"/>
    </bean-instance-pools>
</pools>
...

资源-适配器配置

代码语言:javascript
复制
<subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
...
 <resource-adapter id="amq.jmsra.main">
    ...
     <connection-definitions>
         <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="${amq.jndi.factory}" enabled="true" pool-name="ConnectionFactory">
             <xa-pool>
                 <min-pool-size>10</min-pool-size>
                 <initial-pool-size>10</initial-pool-size>
                 <max-pool-size>35</max-pool-size>
             </xa-pool>
         </connection-definition>
     </connection-definitions>
 </resource-adapter>
...

MDB代码:

代码语言:javascript
复制
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "${amq.jndi.factory}"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "in_queue"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName="minSessions", propertyValue="5"),
        @ActivationConfigProperty(propertyName="maxSessions", propertyValue="40")
})
@ResourceAdapter("amq.jmsra.main")
public class ServerMessageListener implements MessageListener {
...

我预计这种配置会增加使用者的数量,但是当从ActiveMQ web控制台查看队列的状态时,我只看到一个使用者。

EN

回答 1

Stack Overflow用户

发布于 2019-06-28 01:19:43

在我看来,基于ActiveMQ JCA的源代码,会话将根据需要创建,直至基于消息吞吐量的maxSessions。因此,如果您只是启动MDB,并且没有要使用的消息,那么我希望只有一个会话是活动的。

尝试将Thread.sleep(5000);放入MDB的onMessage()中,然后将数千条消息推入其侦听队列中。我敢打赌,随着JCA被迫创建新的会话以满足需求,消费者数量肯定会增加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56790454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档