我在conf / activemq.xml中设置了关于Redelivery和DLQ处理的配置,如https://activemq.apache.org/message-redelivery-and-dlq-handling.html
但是,当我尝试抛出异常,看它会起作用。它甚至无法发送到默认的DLQ ActiveMQ.DLQ
@JmsListener(destination = "${queue-name}",
concurrency="${queue-concurrency}",
containerFactory="jmsListenerContainerFactory")
public void onMessage(TextMessage message) throws JMSException {
try {
LOG.debug("JMS Message = {}", message.getText());
throw new Exception();
// Do other thing.
}
catch (Exception e) {
throw new JMSException(e.getMessage());
}
死信函队列通常用于因各种因素(超时,过期,配置错误等)而无法传递的消息 - 因此必须存在无法传递的消息。但是,在您的情况下,消息传递正常,只是没有处理,没有例外。
如果要将使用者的处理绑定到消息,则应考虑客户端确认或事务。然后,如果您没有确认或提交,因为您在ack / commit之前有异常,该消息将重复发送给您的消费者 - 或发送到DLQ。