28.5.6. 使用 JMS 作为死信队列存储交换


通常,当使用 JMS 作为传输时,它只会将正文和标头作为载荷传输。如果要将 JMSDead Letter Channel 搭配使用,请将 JMS 队列用作 Dead Letter Queue,则通常导致的 Exception 不会存储在 JMS 消息中。但是,您可以使用 JMS 死信队列上的 transferExchange 选项指示 Camel 将整个 Exchange 存储在队列中,作为包含 org.apache.camel.support.DefaultExchangeHolderjavax.jms.ObjectMessage。这可让您从死信队列使用,并在 Exchange.EXCEPTION_CAUGHT 的 Exchange 属性中检索原因例外。以下演示演示了这一点:

// setup error handler to use JMS as queue and store the entire Exchange
errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
Copy to Clipboard Toggle word wrap

然后,您可以使用 JMS 队列并分析问题:

from("jms:queue:dead").to("bean:myErrorAnalyzer");

// and in our bean
String body = exchange.getIn().getBody();
Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
// the cause message is
String problem = cause.getMessage();
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat