我正在使用 MDB
来处理 JMS
消息。万一出现异常,理想情况下,我还想用错误详细信息(异常消息)标记 JMS
消息,并允许它进入死信队列(在 Weblogic 服务器中配置)。
在 catch block 中,我对 JMS
消息对象进行了如下修改
msg.clearProperties();
msg.setStringProperty("error", e.getMessage());
并抛出一个 RuntimeException
将消息消费过程标记为失败,因此它移动到一个失败的请求队列(我配置 Weblogic NOT REDELIVER 消息)
根据配置,失败的消息会进入失败的请求队列 - 但是不包括“错误”属性。阅读 JMS
1.1 规范文档后,它表示重新传送的 JMS
消息将具有“原始”内容。在这种情况下,我强制 Weblogic 不重新传送它 - 不知道为什么我看不到我在消息上设置的自定义属性
这是预期的吗?如果是,有什么解决方法吗?
最佳答案
是因为你回滚了事务。您无法回滚 JMS 事务并仍然对消息进行更改。
您应该做的是手动将修改后的消息发送到同一事务中的错误队列。在这种情况下,您不能从 MDB 中抛出异常。
关于jakarta-ee - 在发送到死信队列之前修改 JMS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531922/