我试图获取重新传递消息的设置,以便在使用JBoss EAP 6.2,A-MQ 5.9独立版和资源适配器之间的RedHat环境中工作。使用的连接工厂是XaPooledConnectionFactory。资源适配器在EAP standalone-full-ha.xml中配置。重新传递设置在代理网址上设置。
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
<resource-adapters>
<resource-adapter id="activemq-rar-5.9.0.redhat-610379.rar">
<module slot="5.9.0.redhat-610379" id="org.apache.activemq"/>
<transaction-support>XATransaction</transaction-support>
<admin-objects>
<admin-object class-name="org.apache.activemq.pool.XaPooledConnectionFactory" jndi-name="java:jboss/a/ConnectionFactory" enabled="true" use-java-context="true" pool-name="ConnectionFactory1">
<config-property name="brokerUrl">
failover:(tcp://localhost:36616,tcp://localhost:36616)?jms.prefetchPolicy.all=0&jms.rmIdFromConnectionId=true&jms.UserName=xxxxxxxx&jms.Password=xxxxxxxx&jms.redeliveryPolicy.useCollisionAvoidance=true&jms.redeliveryPolicy.collisionAvoidancePercent=50&jms.redeliveryPolicy.useExponentialBackOff=true&jms.redeliveryPolicy.initialRedeliveryDelay=2000
</config-property>
<config-property name="tmFromJndi">
true
</config-property>
</admin-object>
<admin-object class-name="org.apache.activemq.pool.XaPooledConnectionFactory" jndi-name="java:jboss/b/ConnectionFactory" enabled="true" use-java-context="true" pool-name="ConnectionFactory2">
<config-property name="brokerUrl">
failover:(tcp://localhost:36616,tcp://localhost:36616)?jms.prefetchPolicy.all=0&jms.rmIdFromConnectionId=true&jms.UserName=xxxxxxxx&jms.Password=xxxxxxxx&jms.redeliveryPolicy.useCollisionAvoidance=true&jms.redeliveryPolicy.collisionAvoidancePercent=50&jms.redeliveryPolicy.useExponentialBackOff=true&jms.redeliveryPolicy.initialRedeliveryDelay=2000
</config-property>
<config-property name="tmFromJndi">
true
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>
测试时,会立即重新传递消息,而不考虑最初的2秒延迟或指数退避。
但是,在设置测试项目时,我可以使用普通的ActiveMQManagedConnectionFactory来设置工作,如下所示:
<resource-adapter id="activemq-rar-5.9.0.redhat-610379.rar">
<archive>
activemq-rar-5.9.0.redhat-610379.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="Password">
xxxxxxxx
</config-property>
<config-property name="UserName">
xxxxxxxx
</config-property>
<config-property name="InitialRedeliveryDelay">
2000
</config-property>
<config-property name="MaximumRedeliveries">
5
</config-property>
<config-property name="RedeliveryUseExponentialBackOff">
true
</config-property>
<config-property name="RedeliveryBackOffMultiplier">
2
</config-property>
<config-property name="ServerUrl">
tcp://localhost:36616?jms.rmIdFromConnectionId=true
</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ConnectionFactory" enabled="true" pool-name="ConnectionFactory">
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>false</prefill>
<is-same-rm-override>false</is-same-rm-override>
</xa-pool>
<recovery>
<recover-credential>
<user-name>xxxxxxxx</user-name>
<password>xxxxxxxx</password>
</recover-credential>
</recovery>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/HELLOWORLDMDBQueue" use-java-context="true" pool-name="HELLOWORLDMDBQueue">
<config-property name="PhysicalName">
HELLOWORLDMDBQueue
</config-property>
</admin-object>
<admin-object class-name="org.apache.activemq.command.ActiveMQTopic" jndi-name="java:/topic/HELLOWORLDMDBTopic" use-java-context="true" pool-name="HELLOWORLDMDBTopic">
<config-property name="PhysicalName">
HELLOWORLDMDBTopic
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
我没有在任何项目的任何位置以编程方式设置这些设置。我需要使用XaPooledConnectionFactory,最好使用类似于第一个的配置(如果可能),但实际应用的重新传递设置。 XaPooledConnectionFactory有关于此的任何已知问题吗?或者通常通过amq url发送参数?将测试项目中的属性放入我的XaPooled项目中没有任何区别。
提前致谢!
答案 0 :(得分:0)
根据&#34;传递嵌套网址的额外选项。&#34; http://activemq.apache.org/failover-transport-reference.html的部分,您希望通过failover:
传输传递到基础传输URI的任何参数都应以nested.
为前缀。我自己也没有这样做,所以我不能肯定地说它是对的,但它绝对是一个开始的地方。