28.5. サンプル
JMS は、他のコンポーネントの多くの例でも使用されています。ただし、開始するためのいくつかのサンプルを以下に示します。
28.5.1. JMS からの受信 リンクのコピーリンクがクリップボードにコピーされました!
次のサンプルでは、JMS メッセージを受信し、メッセージを POJO にルーティングするルートを設定します。
from("jms:queue:foo"). to("bean:myBusinessLogic");
from("jms:queue:foo").
to("bean:myBusinessLogic");
もちろん、任意の EIP パターンを使用して、ルートをコンテキストベースにすることができます。たとえば、次のように、高額の支出者向けに注文トピックをフィルター処理します。
from("jms:topic:OrdersTopic"). filter().method("myBean", "isGoldCustomer"). to("jms:queue:BigSpendersQueue");
from("jms:topic:OrdersTopic").
filter().method("myBean", "isGoldCustomer").
to("jms:queue:BigSpendersQueue");
28.5.2. JMS への送信 リンクのコピーリンクがクリップボードにコピーされました!
以下のサンプルでは、ファイルフォルダーをポーリングし、ファイルコンテンツを JMS トピックに送信します。ファイルの内容を BytesMessage
ではなく TextMessage
にしたいので、本文を String
に変換する必要があります。
from("file://orders"). convertBodyTo(String.class). to("jms:topic:OrdersTopic");
from("file://orders").
convertBodyTo(String.class).
to("jms:topic:OrdersTopic");
28.5.3. アノテーションの使用 リンクのコピーリンクがクリップボードにコピーされました!
Camel にはアノテーションもあるため、POJO Consuming と POJO Producing を使用できます。
28.5.4. Spring の DSL サンプル リンクのコピーリンクがクリップボードにコピーされました!
前の例では、Java DSL を使用しています。Camel は Spring XML DSL もサポートしています。以下は、Spring DSL を使用した高額支出者のサンプルです。
28.5.5. その他のサンプル リンクのコピーリンクがクリップボードにコピーされました!
JMS は、この Camel ドキュメントだけでなく、他のコンポーネントや EIP パターンの例の多くにも登場します。そのため、ドキュメントを自由に参照してください。
28.5.6. JMS を Exchange を格納するデッドレターキューとして使用する リンクのコピーリンクがクリップボードにコピーされました!
通常、JMS をトランスポートとして使用する場合、ペイロードとしてボディとヘッダーのみを転送します。デッドレターチャネル で 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"));
// setup error handler to use JMS as queue and store the entire Exchange
errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
次に、JMS キューから消費して問題を分析できます。
28.5.7. エラーのみを格納するデッドレターチャネルとして JMS を使用する リンクのコピーリンクがクリップボードにコピーされました!
JMS を使用して、原因エラーメッセージを格納したり、自分で初期化できるカスタムボディーを格納したりできます。次の例では、Message Translator EIP を使用して、失敗した交換を JMS デッドレターキューに移動する前に変換を行います。
// we sent it to a seda dead queue first errorHandler(deadLetterChannel("seda:dead")); // and on the seda dead queue we can do the custom transformation before its sent to the JMS queue from("seda:dead").transform(exceptionMessage()).to("jms:queue:dead");
// we sent it to a seda dead queue first
errorHandler(deadLetterChannel("seda:dead"));
// and on the seda dead queue we can do the custom transformation before its sent to the JMS queue
from("seda:dead").transform(exceptionMessage()).to("jms:queue:dead");
ここでは、元の原因のエラーメッセージのみを変換に保存します。ただし、任意の式を使用して、好きなものを送信できます。たとえば、Bean でメソッドを呼び出したり、カスタムプロセッサーを使用したりできます。