如何配置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 error
和message3
时,我希望消费者处理message1
并永远重试message2 with error
。在成功使用message3
之前,不应处理message2 with error
。实际发生的是在重试之间消耗message3
。如何改变这种行为?有什么想法吗?
答案 0 :(得分:-1)
默认情况下,ActiveMQ预取为1000。
您可以在ActiveMQConnectionFactory或ActiveMQConnection上指定ActiveMQPrefetchPolicy的实例。这允许您配置所有单独的预取值;因为每种不同的服务质量都有不同的价值。 e.g。
持久性队列(默认值:1000)
...