当前位置: 首页 > 知识库问答 >
问题:

为什么ActiveMQ在为以后的重新传递重新安排之前要传递消息6次?

家浩瀚
2023-03-14

我正在使用apacheMQ作为队列管理器。我使用Spring的DefaultMessageListenerContainer来使用消息。我已经对它进行了配置,以便它有一个事务:

<bean id="jmsContainerXXX" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="myConnectionFactory"/>
    <property name="destination" ref="myDestination"/>
    <property name="messageListener" ref="myMessageListener" />
    <property name="concurrentConsumers" value="5"/>
    <property name="sessionTransacted" value="true" />
</bean>
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
    <redeliveryPolicyMap>
        <redeliveryPolicyMap>
            <!-- the fallback policy for all destinations -->
            <defaultEntry>
                <redeliveryPolicy maximumRedeliveries="10" 
                                  maximumRedeliveryDelay="14400000"
                                  redeliveryDelay="60000"
                                  initialRedeliveryDelay="60000" 
                                  useExponentialBackOff="true"
                                  backOffMultiplier="5"/>
            </defaultEntry>
        </redeliveryPolicyMap>
    </redeliveryPolicyMap>
</redeliveryPlugin>

共有1个答案

谷梁楚青
2023-03-14

如果你不能交付是一回事,当你交付时是另一回事,但你得到了一个例外。http://activemq.apache.org/message-redelivery-and-dlq-handling.html

我想默认的毒丸值是6?对此不确定。

 类似资料:
  • 我正在读一条来自Solace的信息。我能够成功地阅读信息。假设我正在阅读一条消息,在侦听器线程上读取/处理消息时,应用程序崩溃。那我怎么能在那上面再读一遍那条信息呢。使用下面的代码,我无法再次阅读该消息。下面是我的配置

  • 我想在SQS上发布一条消息,并在几个小时后处理该消息。 如何根据某些属性安排消息传递或从SQS中选择消息? 我已经实现了一个SQS消费者,但我正在接收来自SQS队列的每条消息。有可能在SQS上实现类似的功能吗?我正在考虑接收每条消息,如果还没到处理该消息的时间,就再次发送到队列。

  • 有以下骆驼路线。 重新交付策略在xml中定义如下- 但是,当抛出异常时,会在执行OnException块之前进行重新传递尝试(一些配置属性会在onException块中更新。在OnException内部的DiscoveryService中有一个调试点,它会在进行重新传递尝试后被调用)。因此,当前消息在没有重新传递的情况下丢失。不确定为什么会发生这种情况。使用actiemq-camel版本5.8.0

  • 我读到:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2 "通常,确认特定消息会确认会话接收的所有先前消息"(在客户端确认模式下) “邮件重新传递不是自动的,但在某些情况下会重新传递邮件” 我的问题是: 如何确保每次收到消息时都有一个

  • 我们有一个camel路由,在这里我们从输入队列读取消息,处理它,设置一些JMS头(使用exchange.getin().setheader(...)),然后将消息路由到某个输出队列。在MQ故障转移方案期间,将重新传递消息。但是,当重新传递消息时,我前面放置的JMS头丢失了。是否有任何方法可以在重新交付后保留JMS头?

  • 我正试图用JPATransactionManager即spring PlatformTransactionManager运行一个camel transacted()路由(一个独立的java进程)(因为我希望camel路由在单个DB事务中运行),但我无法在事务方法失败的情况下禁止从MQ Broker进行重新传递,尽管我在onException子句中使用了handle(true)以及自定义的重新传递策