当消费者无法处理消息并调用会话回滚时,我需要禁用消息重新传递。目标是将消息保留在队列中而不重新传递,我的后台消费者将继续尝试处理消息。
在connection.getRedeliveryPolicy()中,我看到了自定义重新传递延迟和其他设置的选项,但我没有看到完全禁用重新传递的任何选项。这是否可行(最好以编程方式使用connection.getRedeliveryPolicy()属性,例如。)
答案 0 :(得分:0)
遗憾的是,没有解决方案可以停用RedeliveryPolicy,但您可以设计代码。
看看ActiveMQ redelivery does not work
也许org.apache.activemq.ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE
可以帮到你,但请记住:
一旦代理发送了预取限制数量的消息 消费者它不会向该消费者发送任何更多消息 直到消费者承认至少50%的预取 邮件,例如,它收到的prefetch / 2。当经纪人有 收到上述确认后,它将发出进一步的预取/ 2 向消费者提供的消息数量,以及其自身的充值信息 预取缓冲区。请注意,可以指定预取限制 基于每个消费者(见下文)。
另一种解决方案是将消息发送到另一个队列以供后台消费者使用。