179.20.6. 使用 JMS 作为 Dead Letter Queue store Exchange
通常,当使用 JMS 作为传输时,它只会传输正文和标头作为有效负载。如果您想将 JMS 与 Dead Letter Channel 搭配使用,请将 JMS 队列用作 Dead Letter Queue,则通常会将原因 Exception 存储在 JMS 消息中。但是,您可以使用 JMS 死信队列上的 transferExchange
选项指示 Camel 将整个 Exchange 存储在队列中,作为包含所有 org.apache.camel.impl .
DefaultExchangeHolder 的 org.apache.camel.impl.DefaultExchangeHolder
。这样,您可以从 Dead Letter Queue 使用,并使用主要 Exchange.EXCEPTION_CAUGHT
从 Exchange 属性中检索导致的异常。以下演示演示了这一点:
// setup error handler to use JMS as queue and store the entire Exchange errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
然后,您可以使用 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();