Jboss EAP 6.4 中不同消息提供者的多个资源适配器是否共享默认的 bean-instance-pool?
Do multiple resource adapters of different Message providers in Jboss EAP 6.4 share the default bean-instance-pool?
我们正在使用 JBoss EAP6.4。在我们的项目中,我们使用了两个 MOM:
1) Websphere MQ 2) 慰藉 MQ
这就是我们在 standalone.xml
中定义的上述两个 MOM 的资源适配器的方式
<?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
值以限制默认情况下用于消息驱动 Bean 的实例池。
- 对于少数 MDB,我们使用 jboss-ejb3.xml
明确覆盖了每个 bean 的实例池值
因为我们有多个消息驱动的 bean 同时监听 WMQ 和 SOLACE,
我的问题是:
我们尚未在 jboss-ejb3.xml 中为其定义显式池的 MDB(监听 WMQ 队列和 SOLACE 队列)是否会共享相同的默认池在标签下定义,即
<mdb>
<resource-adapter-ref resource-adapter-name="wmq.jmsra.rar"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
或者默认池是否仅适用于侦听 WMQ 队列的 MDB。
- 如果默认池仅应用于监听 WMQ 队列的 MDB,监听没有在 standalone.xml 或 jboss-[=42 中定义池大小的 Solace 队列的 MDB 会发生什么=]
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) 同上。请注意,您可以在 JMX 中看到 MDB 部署正在使用的实例池名称。请注意,如果您有单独的实例池,则池统计信息会变得更有意义。
我们正在使用 JBoss EAP6.4。在我们的项目中,我们使用了两个 MOM: 1) Websphere MQ 2) 慰藉 MQ 这就是我们在 standalone.xml
中定义的上述两个 MOM 的资源适配器的方式<?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
值以限制默认情况下用于消息驱动 Bean 的实例池。 - 对于少数 MDB,我们使用 jboss-ejb3.xml 明确覆盖了每个 bean 的实例池值
因为我们有多个消息驱动的 bean 同时监听 WMQ 和 SOLACE, 我的问题是:
我们尚未在 jboss-ejb3.xml 中为其定义显式池的 MDB(监听 WMQ 队列和 SOLACE 队列)是否会共享相同的默认池在标签下定义,即
<mdb> <resource-adapter-ref resource-adapter-name="wmq.jmsra.rar"/> <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> </mdb>
或者默认池是否仅适用于侦听 WMQ 队列的 MDB。
- 如果默认池仅应用于监听 WMQ 队列的 MDB,监听没有在 standalone.xml 或 jboss-[=42 中定义池大小的 Solace 队列的 MDB 会发生什么=]
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) 同上。请注意,您可以在 JMX 中看到 MDB 部署正在使用的实例池名称。请注意,如果您有单独的实例池,则池统计信息会变得更有意义。