jakarta-ee - 在发送到死信队列之前修改 JMS 消息

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

我正在使用 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/

相关文章:

java - 基于 EJB 的应用程序中的依赖关系反转

java - JMS 本地事务与 TransactionManager

jdbc - 运行应用程序时出现 Weblogic javax.naming.NameNotFoundException

java - MyEclipse 无法识别包

security - 嵌入式 Glassfish、安全性和 Arquillian 问题

java - 独立 java 程序中的 JMS 队列监听器

jms - JMeter JMS 点对点请求响应 : "No reply message received"

spring-mvc - 在 Spring 3.1.1 中使用 javax.validation API

Weblogic 10.3.5 管理控制台部署页面 - 缺少应用程序状态

java - 为 JMS 使用特定的 keystore