Artemis:如何在出错时停止使用消息?

时间:2017-12-13 14:19:07

标签: spring spring-jms activemq-artemis

如何配置ActiveMQ Artemis或我的Spring JMS客户端,以便在出错时不使用任何其他消息?

我按照以下方式配置了我的经纪人:

<addresses>
    <address name="SimplePointToPoint">
        <anycast>
            <queue name="SimplePointToPoint"/>
        </anycast>
    </address>
</addresses>
<address-settings>
    <address-setting match="SimplePointToPoint">
        <max-delivery-attempts>-1</max-delivery-attempts>
    </address-setting>
</address-settings>

这是我的消费者的代码:

@JmsListener(destination = "SimplePointToPoint")
public void consumeMessage(Message<String> message) {
    if (message.getPayload().contains("error"))
        throw new RuntimeException();

    log.info("received message: {}", message.getPayload());
}

发送message1message2 with errormessage3时,我希望消费者处理message1并永远重试message2 with error。在成功使用message3之前,不应处理message2 with error。实际发生的是在重试之间消耗message3。如何改变这种行为?有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

默认情况下,ActiveMQ预取为1000。

请参阅the documentation

  

您可以在ActiveMQConnectionFactory或ActiveMQConnection上指定ActiveMQPrefetchPolicy的实例。这允许您配置所有单独的预取值;因为每种不同的服务质量都有不同的价值。 e.g。

     

持久性队列(默认值:1000)

     

...