0

如何配置 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());
}

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

4

1 回答 1

0

ActiveMQ 预取默认为 1000。

请参阅文档

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

持久队列(默认值:1000)

...

于 2017-12-14T14:18:54.767 回答