28.5.6. JMS を Exchange を格納するデッドレターキューとして使用する
通常、JMS をトランスポートとして使用する場合、ペイロードとしてボディとヘッダーのみを転送します。Dead Letter Channel, で JMS を使用する場合、JMS キューをデッドレターキューとして使用する場合、通常、発生した例外は JMS メッセージに格納されません。ただし、JMS デッドレターキューで transferExchange オプションを使用して、Exchange 全体を org.apache.camel.support.DefaultExchangeHolder を保持する javax.jms.ObjectMessage としてキューに格納するよう Camel に指示できます。これにより、デッドレターキューから消費し、キー 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();