在将JMS消息发送到死信队列之前修改它

时间:2015-04-09 07:04:19

标签: java-ee jms weblogic11g java-ee-5

我正在使用MDB来处理JMS消息。如果出现异常,我理想情况下也希望用错误详细信息标记JMS消息(异常消息)并允许它进入死信队列(在Weblogic服务器中配置)。

在catch块中,我将JMS Message对象变异如下

msg.clearProperties();
msg.setStringProperty("error", e.getMessage());

并抛出一个RuntimeException,标记消息使用过程失败,因此它移动到一个失败的请求队列(我配置了Weblogic NOT REDIRIVER消息)

根据配置,消息失败转到失败的请求队列 - 但是错误'财产不包括在内。阅读JMS 1.1规范文档后,它会说重新发送的JMS消息会包含“原始数据”。内容。在这种情况下,我强迫Weblogic不要重新发送它 - 不知道为什么我看不到我在消息上设置的自定义属性

这是预期的吗?如果是,有任何解决方法吗?

1 个答案:

答案 0 :(得分:4)

这是因为你回滚了这个交易。您无法回滚JMS事务并仍然对消息进行更改。

您应该做的是将修改后的消息手动发送到同一事务中的错误队列。在这种情况下,您不能从MDB中抛出异常。