EIP / Message Filter


EIP

Message Filter(メッセージフィルタ)

一言要約

  • Message Filterは(主に)メッセージ受け取りの制御を受信者側に請け負わせたい場合に使用する。

要約 

  • 注文処理の例を続け、大口顧客への価格変動やキャンペーンを公開していると仮定してみる。品目価格の変更に対して顧客に通知メッセージを送信する。あるいは一部の顧客は、特定の項目に関連する価格の更新やプロモーションを受け取ることに興味がある可能性がある。例えばガジェットを購入した場合、ウィジェットには興味がないかもしれない。

コンポーネントはどのように興味のないメッセージの受け取りを回避できるのか?

  • 関連メッセージのみを受信するコンポーネントのための最も基本的な方法は、関連するメッセージを運ぶチャネルだけにサブスクライブすること。例えば、ウィジェットのアップデートやガジェットの更新のために、それぞれ別のチャネルを作成して使用することができる。お客は、1つまたは他のチャネルあるいは両方を"購読"することは自由。
  • この方法では、新規加入者は、システムを変更せずに参加することができるという利点がある一方、複数のパラメータの組み合わせを扱う場合、チャネル数が急速に爆破する恐れがある。例えば5%,10%,15%そしてガジェットとウィジェットそれぞれの値下げを受信する場合6つのチャネルを必要とする。

高い柔軟性と頻繁な変更に対応できるソリューション

  • 例えば、複数の宛先(受信者リストに記載されて概念)にルーティングするように、コンテンツベースのルーターを変更することができる。この予測ルータは、任意の追加の手順を実行する必要がないように、各受信者に関連するメッセージのみを送信する。
  • しかし、コンテンツベースルータに、すべての加入者の設定を維持することが重荷となる。受信者や自分の好みのリストを迅速に変更する場合は、このメンテナンスは悪夢となる。
  • 一方で、単にすべてのコンポーネントに変更をブロードキャストし、各コンポーネントが望ましくないメッセージを除外することも期待できる。
  • しかし、このアプローチは、我々は実際のコンポーネントを制御していることを前提としている。パッケージ·アプリケーション、レガシー·アプリケーションまたはアプリケーションに対処するための多くの統合シナリオでは制御下にはない。
  • また、フィルタリングロジックをコンポーネントの内部に組み込むことは、メッセージの特定のタイプのコンポーネントへの依存を生じさせる。例えば、もしも顧客が一般的な価格を監視するコンポーネントを使用している場合、ウィジェットやガジェットの両方のためにコンポーネントを使用し、それぞれ別の基準でそれを使用したいかもしれない。

一連の基準に基づいてチャネルからの不要なメッセージを排除するために、メッセージルーターの特別な種類<メッセージフィルタ>を使用する。

書籍にはメッセージフィルタを表現する図があります>

  • メッセージフィルタは、単一の出力チャンネルのみを持っている。もしもメッセージの内容がメッセージフィルタによって指定された条件に一致する場合、そのメッセージは出力チャネルにルーティングされる。一致しなかった場合、メッセージは破棄される。
  • メッセージフィルタは、いずれかの出力チャネルまたはnullチャネル(それに発行されたメッセージを破棄するチャネル)にメッセージをルーティングするコンテンツベースのルータの特殊なケースと考えることができる。

ステートレス対ステートフルメッセージフィルタ

  • ウィジェットとガジェットの例では、ステートレスメッセージフィルタ、すなわち説明したように、メッセージフィルタは単一のメッセージを検査して、もっぱらそのメッセージに含まれる情報に基づいて、それを渡すべきかどうかを決定する。したがって、メッセージフィルタは、メッセージ間で状態を維持する必要がなく、ステートレスであると見なされる。
  • ステートレスコンポーネントは、処理をスピードアップするために、並行して複数のコンポーネントのインスタンスを実行できる利点がある。
  • メッセージフィルタはステートレスである必要はない。例としては、重複したメッセージを排除するためのメッセージフィルタを使用することがある。各メッセージには、一意のメッセージ識別子を持っていると仮定すると、メッセージフィルタは、過去のメッセージの識別子が格納された識別子のリストを使用して、重複したメッセージを認識することができる。

メッセージングシステムに組み込まれているフィルタリング機能

  • 一部のメッセージングシステムでは、メッセージングインフラストラクチャ内部メッセージフィルタの側面を組み込んでいる。
  • たとえば、いくつかのパブリッシュ·サブスクライブ·システムでは、パブリッシュ·サブスクライブチャンネルのための階層構造を定義することができる。'wgco.update.*.widget'のようにして全てのウィジットを購読するしたり、'wgco.update.promotion.*'のようにしてウィジェットやガジェットに関連するすべてのプロモーションを購読することができる。
  • 命名法により提供される柔軟性はまだ限られている。11.5%以上、の価格が変わったときといった条件をチャンネル名によって表現することは難しいだろう。
  • 他のメッセージングシステムは、受信側アプリケーション内部の選択的消費者のためのAPIのサポートを提供する。メッセージセレクタは、アプリケーションがメッセージを見て取得する前に、受信メッセージの内部ヘッダまたはプロパティ要素を評価する式のこと。条件がtrueに評価されない場合は、メッセージが無視され、アプリケーション·ロジックに渡されない。
  • メッセージセレクタは、アプリケーションに組み込まれているメッセージフィルタとして機能する。ただし、アプリケーションを変更する必要とさせる。
  • メッセージフィルタとの選択的消費の重要な違いの1つは選択的な消費者を使用している消費者は、指定した条件に一致しないメッセージを消費しないということ。一方、メッセージフィルタは、指定した条件に一致する出力チャネルにのみを公開し、入力チャネルからメッセージを削除する。
  • メッセージング·インフラストラクチャーを使用してフィルタ式を登録する1つの利点は、インフラがフィルタ基準に基づいてスマートな内部のルーティング決定を行うことができること。メッセージの受信側がメッセージの発信者とは異なるネットワークセグメント(あるいはインターネット上)に座っていると仮定する。メッセージを破棄したいことを見つけるためだけにメッセージフィルタにメッセージを送ることは無駄である。
  • 一方、我々は、受信者が中央のメッセージルーターの代わりにメッセージルーティングを制御するために、メッセージフィルタメカニズムを使用するようにしたい。
  • もしも、メッセージフィルタがメッセージングインフラストラクチャがメッセージ加入者に提供しているAPIの一部である場合、インフラストラクチャは、ソースに近いフィルタ式を自由に伝播できる。
  • これは、メッセージのサブスクライバのコントロールを保つ、本来の意図を維持し、不要なネットワークトラフィックを避けることを可能にする。
  • この動作は、動的受信者リストに似ている。(訳者質問:←動的受信者リストってなに?)

ルーティング機能を実装するためにメッセージフィルタを使用する

  • コンテンツベースのルーターのそれに同等の機能を実装するために、ロードキャストチャ <書籍にはコンテンツベースルーターの例を表現する図があります>
  • コンテンツベースのルータでは、各メッセージの内容を評価し、適切な受信機に予測的にルーティングする。
  • ブロードキャストチャネルとメッセージフィルターのセットを使用する選択  <書籍にはブロードキャストチャネルとメッセージフィルターのセットの例を表現する図があります>
  • 二つ目のオプションはパブリッシュ·サブスクライブのチャンネルにメッセージをブロードキャストする。各受信者は、不要なメッセージを排除するフィルターメッセージを装備する。 次の表は、ソリューションのいくつかの違いを特徴付ける:
コンテンツベースのルーター メッセージフィルタを備えたパブ - サブチャンネル
正確に1消費者がそれぞれのメッセージを受信複数のコンシューマがメッセージを消費することができる。
中央制御およびメンテナンス - 予測ルーティング。分散制御およびメンテナンス - 反応性フィルタリング
ルータは、参加者について知っている必要がある。参加者が追加または削除された場合、ルータは更新する必要がある。参加者の知識が必要とされない。参加者を追加または削除するのは簡単
多くの場合、ビジネス·トランザクション、例えば受注のために使用イベント通知または情報メッセージのために使用
キューに基づいたチャンネルで一般により効率的。パブリッシュ·サブスクライブチャンネルで一般的により効率的。
  • どのように我々は2つ​​のオプションのいずれかを決めるのか?
  • 同じメッセージを処理するために複数の受信者のための能力が必要な場合は、メッセージフィルタを使用したパブサブチャンネルを使用する必要がある。ほとんどの場合、どちらの当事者がルーティング決定(および維持する必要がある)に対する制御を有しているかにより決定する。中央制御を維持するか、または受信者に請け負わせたいか?
  • 特定の受取人だけによって見られるべき機密データが含まれている場合は、コンテンツベースのルータを使用する必要がある。
  • ネットワークトラフィックの考慮事項も決定を駆動することができる。(内部ネットワーク上でIPマルチキャストを使用して)情報をブロードキャストするための効率的な方法を持っている場合は、フィルタを使用すると、非常に効率的で、単一のルータの潜在的なボトルネックを回避することができる。しかしながら、この情報はインターネット上でルーティングされた場合は、我々はポイントツーポイント接続に限定されている。しかしながら、この情報はインターネット上でルーティングされた場合は、ポイントツーポイント接続に限定されている。このケースではすべての参加者に個別にメッセージが送信されるのを防ぐのでルータがはるかに効率的です。(訳者質問:←なんかこの部分全体的によく分かりません。ネットワーク知識がない?誤訳してる?)
  • 我々は受信者に制御を渡したいが、ネットワーク効率の理由のためのルータを使用する必要がある場合は、動的受信者リストを採用することができる。この受信者リストは、受信者は自分の好みを表現することができ、データベースまたはルール·ベースに格納できる。メッセージがの到着すると、受信者リストはそのメッセージの基準に一致するすべての受信者にメッセージを転送する。

関連パターン

  • コンテンツベースのルータ、メッセージルーター、セレクティブコンシューマは、パブリッシュ·サブスクライブ  チャネル、受信者リスト 

担当者のつぶやき

みんなの突っ込み