検索

179.6. サンプル

download PDF

JMS は、他のコンポーネントの多くの例でも使用されています。ただし、開始するためのいくつかのサンプルを以下に示します。

179.6.1. JMS からの受信

次のサンプルでは、JMS メッセージを受信し、メッセージを POJO にルーティングするルートを設定します。

from("jms:queue:foo").
   to("bean:myBusinessLogic");

もちろん、任意の EIP パターンを使用して、ルートをコンテキストベースにすることができます。たとえば、次のように、高額の支出者向けに注文トピックをフィルター処理します。

from("jms:topic:OrdersTopic").
  filter().method("myBean", "isGoldCustomer").
  to("jms:queue:BigSpendersQueue");

179.6.2. JMS への送信

以下のサンプルでは、ファイルフォルダーをポーリングし、ファイルコンテンツを JMS トピックに送信します。ファイルの内容を BytesMessage ではなく TextMessage にしたいので、本文を String に変換する必要があります。

from("file://orders").
  convertBodyTo(String.class).
  to("jms:topic:OrdersTopic");

179.6.3. アノテーションの使用

Camel にはアノテーションもあるため、POJO Consuming と POJO Producing を使用できます。

179.6.4. Spring の DSL サンプル

前の例では、Java DSL を使用しています。Camel は Spring XML DSL もサポートしています。以下は、Spring DSL を使用した高額支出者のサンプルです。

<route>
  <from uri="jms:topic:OrdersTopic"/>
  <filter>
    <method bean="myBean" method="isGoldCustomer"/>
    <to uri="jms:queue:BigSpendersQueue"/>
  </filter>
</route>

179.6.5. その他のサンプル

JMS は、この Camel ドキュメントだけでなく、他のコンポーネントや EIP パターンの例の多くにも登場します。そのため、ドキュメントを自由に参照してください。

179.6.6. JMS を Exchange を格納するデッドレターキューとして使用する

通常、JMS をトランスポートとして使用する場合、ペイロードとしてボディーとヘッダーのみを転送します。Dead Letter ChannelJMS を使用する場合、JMS キューをデッドレターキューとして使用する場合、通常、発生した例外は JMS メッセージに格納されません。ただし、JMS デッドレターキューで transferExchange オプションを使用して、Exchange 全体を org.apache.camel.impl.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();

179.6.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");

ここでは、元の原因のエラーメッセージのみを変換に保存します。ただし、任意の式を使用して、好きなものを送信できます。たとえば、Bean でメソッドを呼び出したり、カスタムプロセッサーを使用したりできます。

179.6.8. JMS を使用してコンシューマーの優先度を指定する

一部のブローカー (特に Artemis) では、送信するメッセージのコンシューマー優先度を指定できます。次のサンプルでは、artemisConsumerPriority プロパティーを使用して、優先度に基づいてメッセージを変換します。

<camelContext id="jms-basic-consumer-priority" xmlns="http://camel.apache.org/schema/spring" autoStartup="true">
		<endpoint id="highPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=1000"/>
		<endpoint id="mediumPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=500"/>
		<endpoint id="lowPriorityQueue" uri="jms:queue:inputQueue?artemisConsumerPriority=1"/>

		<endpoint id="resultQueue" uri="jms:queue:outputQueue"/>

		<route>
			<from uri="ref:highPriorityQueue"/>
			<transform>
				<simple>High</simple>
			</transform>
			<to uri="ref:resultQueue"/>
		</route>
		<route>
			<from uri="ref:mediumPriorityQueue"/>
			<transform>
				<simple>Medium</simple>
			</transform>
			<to uri="ref:resultQueue"/>
		</route>
		<route>
			<from uri="ref:lowPriorityQueue"/>
			<transform>
				<simple>Low</simple>
			</transform>
			<to uri="ref:resultQueue"/>
		</route>
	</camelContext>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.