Jakarta ee 在发送到死信队列之前修改JMS消息
我正在使用Jakarta ee 在发送到死信队列之前修改JMS消息,jakarta-ee,jms,weblogic11g,java-ee-5,Jakarta Ee,Jms,Weblogic11g,Java Ee 5,我正在使用MDB来处理JMS消息。在出现异常的情况下,理想情况下,我希望在JMS消息上也标记错误详细信息(异常消息),并允许它进入死信队列(在Weblogic server中配置) 在catch块中,我对JMS消息对象进行了如下修改 msg.clearProperties(); msg.setStringProperty("error", e.getMessage()); 并抛出一个RuntimeException,该异常将消息使用过程标记为失败,因此它移动到一个失败的请求队列(我将Weblo
MDB
来处理JMS
消息。在出现异常的情况下,理想情况下,我希望在JMS
消息上也标记错误详细信息(异常消息),并允许它进入死信队列(在Weblogic server中配置)
在catch块中,我对JMS
消息对象进行了如下修改
msg.clearProperties();
msg.setStringProperty("error", e.getMessage());
并抛出一个RuntimeException
,该异常将消息使用过程标记为失败,因此它移动到一个失败的请求队列(我将Weblogic配置为不重新传递消息)
根据配置,消息Failes进入失败的请求队列-但是不包括“error”属性。阅读了JMS
1.1规范文档后,它表示重新交付的JMS
消息将具有“原始”内容。在这种情况下,我强制Weblogic不重新传递它-不确定为什么我看不到在消息上设置的自定义属性
这是预期的吗?如果是,有什么解决办法吗?这是因为您回滚了事务。您不能回滚JMS事务,并且仍然对消息进行更改
您应该做的是将修改后的消息手动发送到同一事务中的错误队列。在这种情况下,您不能从MDB抛出异常。同意。另外,考虑使用MQDLH。死信队列在WebSphere MQ中定义良好,它们定义了一些死信头(MQDLH)-使用它们(不清除以前的属性)可以帮助管理员执行分析或稍后重播消息。