Почему JBoss создает только одного потребителя ActiveMQ? - PullRequest
0 голосов
/ 27 июня 2019

Почему JBoss EAP 7 создает только одного потребителя с Active MQ (не Artemis)? Как увеличить количество потребителей?

Я пробовал:

  • увеличение maxSession ActivationConfigProperty
  • увеличение размера пула mdb (с помощью тега bean-instance-pools)
  • установить минимальный / максимальный размер пула внутри connection-definition тег

Моя конфигурация:

конфигурация mdb-pool

<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>
...

конфигурация адаптера ресурса

<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:

@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 я вижу только 1 потребителя.

1 Ответ

0 голосов
/ 28 июня 2019

Мне кажется, основываясь на исходном коде ActiveMQ JCA RA, что сеансы будут создаваться по требованию вплоть до maxSessions на основе пропускной способности сообщения. Поэтому, если вы просто запустите MDB и не будете получать сообщения, то я буду ожидать, что будет активен только 1 сеанс.

Попробуйте поместить Thread.sleep(5000); в ваш MDB onMessage(), а затем поместите пару тысяч сообщений в очередь, где его прослушивают. Бьюсь об заклад, вы увидите, что количество потребителей увеличится, поскольку JCA RA вынуждена создавать новые сессии, чтобы не отставать от спроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...