gpt4 book ai didi

java - Spring JMS 监听器即使在异常时也承认

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:07 25 4
gpt4 key购买 nike

我正在使用 JMS 向我的 SQS 队列发送/接收消息,但是即使在使用 client_acknowledge 时出现异常,我也无法重新传送消息。如何做到这一点?我尝试了一个简单的测试,

@JmsListener(destination = "test-normalqueue")
public void receiveNormalQueue(String message)
{

try {
logger.info("message received in normal queue: " + message);
throw new NullPointerException();

} catch (Exception e) {

logger.error(LoggingUtil.getStackTrace(e));;
}

}

即使异常消息没有返回队列。

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(getSQSConnectionFactory());
factory.setConcurrency("1-2");
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
return factory;
}

最佳答案

您必须使用 DMLC 的交易。

使用 Session.AUTO_ACKNOWLEDGEsetSessionTransacted(true)

如果监听器正常退出,则消息被移除。如果监听器抛出异常,则消息将回滚到队列中。

您也可以使用客户端模式处理事务,但您必须自己确认成功的消息。

您不必使用带有 SimpleMessageListenerContainer 的事务,但您仍然必须抛出异常才能使消息重新排队。

关于java - Spring JMS 监听器即使在异常时也承认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43817402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com