Используют ли несколько адаптеров ресурсов разных поставщиков сообщений в Jboss EAP 6.4 общий пул экземпляров компонента по умолчанию?

#jms #jboss6.x #solace #resource-adapter

#jms #jboss6.x #утешение #ресурс-адаптер

Вопрос:

Мы используем JBoss EAP6.4. В нашем проекте мы используем два MOM: 1) Websphere MQ 2) Solace MQ Вот как адаптеры ресурсов двух вышеуказанных MOM определены в нашем standalone.xml

 <?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.7">
<profile>       

    <subsystem xmlns="urn:jboss:domain:ejb3:1.5">

        <mdb>
            <resource-adapter-ref resource-adapter-name="wmq.jmsra.rar"/>
            <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
        </mdb>
        <pools>
            <bean-instance-pools>
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
            </bean-instance-pools>
        </pools>

    </subsystem>


    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
        <resource-adapters>

            <resource-adapter id="wmq.jmsra.rar">
                <archive>wmq.jmsra.rar</archive>
                <transaction-support>NoTransaction</transaction-support>
                <config-property name="traceLevel">3</config-property>
                <config-property name="traceEnabled">true</config-property>
                <connection-definitions>
                    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl" jndi-name="java:jboss/jms/myJMSQueueConnectionFactory" enabled="true" use-java-context="true" pool-name="jms/myJMSQueueConnectionFactoryPool">
                        <config-property name="channel">${mq.channel}</config-property>
                        <config-property name="hostName">${mq.host}</config-property>
                        <config-property name="transportType">${mq.transportType}</config-property>
                        <config-property name="queueManager">${mq.manager}</config-property>
                        <config-property name="port">${mq.port}</config-property>                            
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/abcQueue" enabled="true" use-java-context="true" pool-name="jms/abcQueuePool">
                        <config-property name="targetClient">MQ</config-property>
                        <config-property name="persistence">PERS</config-property>
                        <config-property name="expiry">UNLIMITED</config-property>
                        <config-property name="baseQueueName">${my.abc.queue}</config-property>
                        <config-property name="arbitraryProperties">mdMessageContext="2",mdWriteEnabled="true",mdReadEnabled="true"</config-property>
                        <config-property name="baseQueueManagerName">${mq.manager}</config-property>
                    </admin-object>                       
                </admin-objects>
            </resource-adapter>

            <resource-adapter id="com.solacesystems.ra">
                <archive>sol-jms-ra-7.1.2.248.rar</archive>
                <transaction-support>NoTransaction</transaction-support>
                <config-property name="extendedProps">${solace.extendedproperties}</config-property>
                <config-property name="UserName">${solace.username}</config-property>
                <config-property name="MessageVPN">${solace.vpn}</config-property>
                <config-property name="ConnectionURL">${solace.connectionurl}</config-property>
                <config-property name="Password">${solace.password}</config-property>
                <connection-definitions>
                    <connection-definition class-name="com.solacesystems.jms.ra.outbound.ManagedJMSConnectionFactory" jndi-name="java:jboss/jms/solaceMessageConnectionFactory" enabled="true" pool-name="solaceMessageCFPool">
                        <config-property name="ConnectionFactoryJndiName">${solace.connectionfactory}</config-property>
                        <security>
                            <application/>
                        </security>
                        <validation>
                            <background-validation>false</background-validation>
                        </validation>
                        <recovery>
                            <recover-credential>
                                <user-name>${solace.username}</user-name>
                                <password>${solace.password}</password>
                            </recover-credential>
                        </recovery>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.solacesystems.jms.ra.outbound.TopicProxy" jndi-name="java:jboss/jms/xyzMessageTopic" enabled="true" use-java-context="false" pool-name="xyzMessageTopicPool">
                        <config-property name="Destination">${xyz.topic}</config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>
    </subsystem>
</profile>
  

В приведенном выше файле в основном мы определили два адаптера ресурсов, один для WMQ и один для Solace.

  • Под <mdb> тегом мы определили имя адаптера ресурсов по умолчанию и определенное <bean-instance-pool-ref значение для ограничения пула экземпляров, который используется по умолчанию для компонентов, управляемых сообщениями.
  • Для нескольких МБР мы явно переопределили значение пула экземпляров для каждого компонента, используя jboss-ejb3.xml

Поскольку у нас есть несколько компонентов, управляемых сообщениями, которые прослушивают как WMQ, так и SOLACE, мой вопрос:

  1. Будут ли MDB (прослушивающие как очереди WMQ, так и очереди SOLACE), для которых мы не определили явный пул в jboss-ejb3.xml совместно использовать один и тот же пул по умолчанию, определенный в теге, т.е.

     <mdb>
        <resource-adapter-ref resource-adapter-name="wmq.jmsra.rar"/>
        <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
    </mdb>
      
  2. Или это похоже на то, что пул по умолчанию будет применяться только к MDB, прослушивающим очереди WMQ.

  3. Если пул по умолчанию применяется только к MDB, прослушивающим очереди WMQ, что происходит с MDB, прослушивающими очереди Solace, размер пула которых не определен ни в одном из них standalone.xml или jboss-ejb3.xml

Ответ №1:

1) MDB, для которых не указан пул инстансов, будут использовать mdb-strict-max-pool по умолчанию. Вы можете определить свои собственные пулы (которые я рекомендую):

         <pools>
            <bean-instance-pools>
                <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                <strict-max-pool name="MyPool" max-pool-size="10" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
            </bean-instance-pools>
        </pools>
  

а затем используйте аннотацию:

 import org.jboss.ejb3.annotation.Pool;

@Pool(value="MyPool") 
  

в MDB. Это также можно сделать в файле дескриптора развертывания.

2) Смотрите выше. Я предпочитаю пул экземпляров для каждого развертывания MDB. Мне не нравятся MDB, конкурирующие за пул экземпляров.

3) То же, что и выше. Обратите внимание, что вы можете видеть имя пула экземпляров, которое развертывание MDB использует в JMX. Обратите внимание, что если у вас есть отдельные пулы экземпляров, статистика пула становится намного более значимой.