未应用重新传送设置

时间:2014-09-11 15:29:35

标签: optimization jboss activemq messaging redhat

我试图获取重新传递消息的设置,以便在使用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&amp;jms.rmIdFromConnectionId=true&amp;jms.UserName=xxxxxxxx&amp;jms.Password=xxxxxxxx&amp;jms.redeliveryPolicy.useCollisionAvoidance=true&amp;jms.redeliveryPolicy.collisionAvoidancePercent=50&amp;jms.redeliveryPolicy.useExponentialBackOff=true&amp;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&amp;jms.rmIdFromConnectionId=true&amp;jms.UserName=xxxxxxxx&amp;jms.Password=xxxxxxxx&amp;jms.redeliveryPolicy.useCollisionAvoidance=true&amp;jms.redeliveryPolicy.collisionAvoidancePercent=50&amp;jms.redeliveryPolicy.useExponentialBackOff=true&amp;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项目中没有任何区别。

提前致谢!

1 个答案:

答案 0 :(得分:0)

根据&#34;传递嵌套网址的额外选项。&#34; http://activemq.apache.org/failover-transport-reference.html的部分,您希望通过failover:传输传递到基础传输URI的任何参数都应以nested.为前缀。我自己也没有这样做,所以我不能肯定地说它是对的,但它绝对是一个开始的地方。