169.18.6. エクスチェンジを格納するデッドレターキューとしての JMS の使用
通常、JMS をトランスポートとして使用すると、本文とヘッダーのみをペイロードとして転送します。デッドレター チャネルで JMS を使用し、JMS キューを Dead Letter Queue として使用する場合、通常は原因となった例外は JMS メッセージに保存されません。ただし、JMS のデッドレターキューで transferExchange
オプションを使用して、org.apache.camel.impl.DefaultExchangeHolder
を保持する javax.jms.ObjectMessage
としてエクスチェンジ全体をキューに保存するように指示します。これにより、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();