gpt4 book ai didi

java - 将 onMessage() 方法转换为原子操作

转载 作者:行者123 更新时间:2023-11-30 11:48:07 28 4
gpt4 key购买 nike

我遇到过这样的问题,如果我的下面的方法失败或者是异常,我仍然会使用 msg。我希望该功能在捕获期间进行回滚并将消息放回队列/主题。

public void onMessage(Message message)
{

String messageId = null;
Date messagePublished = null;

try
{
messageId = message.getJMSMessageID();
messagePublished = new Date(message.getJMSTimestamp());
LOGGER.info("JMS Message id =" + messageId + " JMS Timestamp= " + messagePublished);
process(message);
LOGGER.info(" returning from onMessage() successfully =" + messageId + " JMS Timestamp= " + messagePublished);
}
catch(Throwable t)
{
LOGGER.error("Exception:",t);
LOGGER.error(t.getStackTrace() + "\n Exception is unrecoverable.");
throw new RuntimeException("Failed to handle message.",t);
}

}

最佳答案

为此,您可以查看 JMS 中存在的不同确认模式。看这篇文章http://www.javaworld.com/javaworld/jw-02-2002/jw-0315-jms.html .

适合您的模式是客户端模式。所以基本上,客户需要在他们对处理消息感到高兴时确认。

你可以在调用process(message)之后调用acknowledge,如果process(message)方法出现异常,消息不会因为你没有acknowledge而出队。我们之前在 Oracle AQ 中使用过这种方法,效果很好。

这种方法意味着您不必担心队列中消息的事务(数据库事务是另一回事)。您唯一需要确保的是您的应用程序可以处理对带有潜在重复消息的 process(message) 的调用

关于java - 将 onMessage() 方法转换为原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017288/

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