2012-02-06 14 views
8

Apache Camelに新しいので、私は最近、長いコンポーネントリストをレビューして、SEDA queueコンポーネントのサポートを見つけました。普通の待ち行列とSEDA待ち行列

このページは私にはあまり意味がありませんでした。そのため、 "SEDAキュー"という用語のオンライン検索を2回行い、ウィキペディアの記事hereを取得しました。

この記事を読んだ後、SEDAキューと通常の「通常の」キューの違いはわかりません。両方とも、非同期キューを使用してデカップリングシステムの概念を採用しています。

「SEDA」は、各コンポーネント間にキューを置くアーキテクチャのように聞こえるだけです。これは正しいです?

しかし、単なるアーキテクチャであれば、なぜ "SEDA"キューは特別なApache Camelコンポーネントですか?

+3

SEDAはExecutorService(キューとスレッドプール)のようなキューに接続されたスレッドを意味します。おそらくそれがここでの意味です。 –

+0

この質問が尋ねられて以来、ドキュメントが更新されたかどうかはわかりませんが、基本的には最初の行で「seda:コンポーネントは非同期SEDA動作を提供するので、メッセージはBlockingQueueで交換され、コンシューマは_inプロデューサーとは別のスレッド_ – DavidS

答えて

4

SEDAキューは、通常のキューと同じです(そして、上記のPeterが上に述べたように、Camelではコンポーネントの一部としてスレッドプールが関連付けられています)。セダは建築です。 CamelのSEDAコンポーネントは、プロセス内のインメモリキューを使用し、Apache camelの他のキューコンポーネント、つまりJMSコンポーネントと区別するために、別のコンポーネントです。

1

SEDAは、単一のラクダルート内のコンポーネントのデカップリングを提供します。それとも、単一のプロセス内の問題ですか。 。つまり、他のコンポーネントへの非同期呼び出しを行うのに役立ちます。メモリブロッキングキューイングです。 が一方JMSは、システム全体のデカップリングのために使用されている。.. JMSは関与外部ブローカーを持つことになります。.. SEDAは単なる消費者のコンポーネントから

3

を別のスレッドを作成するwilll SEDAは段階的なイベントのための頭文字をとっていますドリブンアーキテクチャは、メッセージ処理のさまざまなフェーズ間のフローを調整するメカニズムとして設計されています。考え方は、プロセス全体からのメッセージ出力の自由度をスムーズにして入力に一致させることです。これにより、消費者スレッドは長期実行の作業をbakgroundに委ねることができ、メッセージを消費することができます輸送から。 交換機がseda:エンドポイントに渡されるとき、それはBlockingQueueに配置されます。このリストは、同じコンテキスト内にあるルートだけがこの種のエンドポイントによって結合されることを意味する、ラクダのコンテキスト内に存在します。キューはデフォルトでは無制限ですが、コンシューマのURIにsize属性を設定することで変更できます。

デフォルトでは、エンドポイントに割り当てられた1つのスレッドは、リストからのエクスチェンジを読み取り、それらをルート経由で処理します。手続きの例に見られるように、concurrenctConsumersの数を増やして、交換機が適時にそのリストから処理されるようにすることが可能です。

SEDAパターンは、1つのルートが処理を終了し、次のフェーズに対処するために別のルートにハンドオフする、InOnlyメッセージの処理に最適です。メッセージ交換パターンがInOutのときに呼び出すことで、seda:エンドポイントからの応答を要求することが可能です。

リファレンス。 Apache Camel Developer's Cookbook

関連する問題