Java 所有连接的默认RedeliveryPolicy.maximumRedeliveries的ActiveMQ配置

Java 所有连接的默认RedeliveryPolicy.maximumRedeliveries的ActiveMQ配置,java,activemq,spring-jms,Java,Activemq,Spring Jms,我正在寻找一种正确的方法,在经过一定的重试次数后将所有消息发送到死信队列 由于redeliveryPlugin只对本地存储起作用,因此破坏了我们基于JDBC的HA配置,因此我们决定将所有消息运行到DLQ中 individualDeadLetterStrategy目标配置在这里很方便: <destinationPolicy> <policyMap> <policyEntries> &

我正在寻找一种正确的方法,在经过一定的重试次数后将所有消息发送到死信队列

由于redeliveryPlugin只对本地存储起作用,因此破坏了我们基于JDBC的HA配置,因此我们决定将所有消息运行到DLQ中

individualDeadLetterStrategy
目标配置在这里很方便:

    <destinationPolicy>
        <policyMap>
            <policyEntries>
                <policyEntry topic=">" >
                    <deadLetterStrategy>
                        <individualDeadLetterStrategy
                                queuePrefix="DLQ."
                                useQueueForQueueMessages="true" />
                    </deadLetterStrategy>
                </policyEntry>
                <policyEntry queue=">" >
                    <deadLetterStrategy>
                        <individualDeadLetterStrategy
                                queuePrefix="DLQ."
                                useQueueForQueueMessages="true" />
                    </deadLetterStrategy>
                </policyEntry>
            </policyEntries>
        </policyMap>
    </destinationPolicy>

您是对的,该插件在主题中无法正常工作,因为重新发送消息时启用了持久性的persistenceAdapter会将其视为重复并丢弃。如果没有持久性,还有另一个问题,即消息可能被发送并标记为已传递给消费者,而不是

您只能选择删除
defaultEntry
,并尝试只向队列添加一个,以便将主题未激活的消息发送到DLQ


您的日志中肯定有类似这样的内容
游标被重复发送…
重复消息添加尝试被拒绝。目的地…

为什么您说这似乎只适用于特定队列。此配置适用于所有目的地。不,事实上,redeliveryPlugin上的插件配置对redeliveryPolicy的maximumRedeliveries值没有影响。如果我将
jms.redeliveryPolicy.maximumRedeliveries
参数放入代理URI中,我可以看到不同之处。重新交付插件配置没有显著效果。您是否启用了代理的调度程序支持?请看这里的最后一行:如果您启用了插件并且没有调度程序,那么代理将无法启动。是,计划程序已启用。但是我不想使用调度程序,我想在XML@HassenBennour关于“仅针对特定队列”:仅当我将队列名称放入policyEntry中时,它才起作用。然后,redeliveryplugin为该特定队列工作。这不会对经纪人的再交付政策产生全球性影响。嗨,谢谢你的回答,但它没有抓住要点。我想知道,是否有一种方法可以全局设置代理的RedeliveryPolicy(而不是RedeliveryPlugin)的默认值。目前,您只能在URI或代码中设置策略。我不想使用redelivery插件,因为它使用schedulerDB,schedulerDB存储在本地文件(KahaDB)中,而不管配置了JDBC还是LevelDB持久性。这会破坏HA设置,因为从属调度器没有传递消息。您在哪里找到此信息?我不想使用重新传递插件,因为它使用schedulerDB,schedulerDB存储在本地文件(KahaDB)中,而不管配置的JDBC或LevelDB持久性如何。据我所知,RedeliveryPlugin只是进行重新传递,而不是存储消息。它在ActiveMQ网站上有文档记录,并且存在描述它的问题。您也可以在leveldb配置页面上看到它。没有关于schedulerDB和jdbc存储的安全HA故障切换的文档。看到和
    <plugins>
        <redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
            <redeliveryPolicyMap>
                <redeliveryPolicyMap>
                    <defaultEntry> 
                        <redeliveryPolicy maximumRedeliveries="0" initialRedeliveryDelay="1001" redeliveryDelay="1001" />
                    </defaultEntry> 
                </redeliveryPolicyMap>                  
            </redeliveryPolicyMap>
        </redeliveryPlugin>
    </plugins>