メッセージ処理の分散化

WiseWebHunter研究

WiseWebHunterのメッセージ分散処理として、 Chain of Responsibilityパターンの適用を考える。 プロトタイプシステムを設計・実装し、その将来性について議論している。

はじめに

様々なメッセージが次々に生成してくる環境においては、 メッセージ処理を部品化し、それらの結合体として全体を構成することが望ましい (理由:一つの場所で処理しようとするとプログラムが肥大し、システム変更の際に見通しがつかなくなるため)。 本研究では、これを実現するためにChain of Responsibilityパターン[1]を応用しようと考える。


Chain of Responsibilityパターン

Chain of Responsibility
図1. Chain of Responsibilityの例

 メッセージを受け取ったオブジェクトは、自分自身で処理できるものは処理し、 処理できないと判断したものは、次のチェーンへ送信する。 いずれだれかが処理してくれるだろうと楽観的に考える方法であるが、 各オブジェクトは他オブジェクトが行う処理と完全に分離される。 また、それぞれを結合し複雑な処理を可能にするチェーンを自由に構成できる。

特徴

  1. Message指向
  2. ハンドラの高度な部品化
  3. 必ずしも処理されるとは限らない


WiseWebHunterへ適用する場合

メッセージの種類としては、「巡回情報、ダウンロード情報、コントロール情報」などがある。

巡回情報ハンドラチェーン

各ハンドラにはURIフィルタを搭載し、 受信したメッセージのURIがフィルタをパスするか否かで、 その場(実行機)での処理実行の可否を判断する。

各チェーンへのメッセージ配信方法

 実行機が送信するメッセージはすべての情報が混在している。 これはメッセージ路を一つに統一した方が、実行機の設計が容易になり整理がつくためである。 混在したメッセージを解釈し、分配するためのハンドラは、それほど難しくない。 メッセージの種類に応じて、転送するチェーンを決めればいい。


プロトタイプシステム

 4人のユーザが自由にメッセージを交換するアプリケーションを考える。 ユーザには、宛先(ユーザ名)とメッセージ内容を送信する機能と、受信したメッセージを読む機能がDialog(図ではSensorNode)として与えられる。 これらのDialogは、Eventを使ってメッセージを送信し、 Eventを受信したオブジェクト(MessageCapture)がハンドラチェーンにメッセージを流す、 そして、ハンドラが自分宛てのメッセージを受信したら、Dialogに伝えるという仕組みである。

オブジェクト図
図2. オブジェクト図

構成図
図3. 構成図

Dialog(SensorNode)
図4. Dialog (SensorNode)の動作例

<Message>
  <To>Hideya</To>
  <From>JO2LXQ</From>
  <Body>Hello. This is JO2LXQ.</Body>
</Message>

考察

 Chain of Responsibilityに基づいてWiseWebHunterのメッセージ処理機構を構成すれば、 将来考えられるメッセージ処理機能の追加も、容易に行うことが可能になる。

例えば、メッセージ中のURIパターン統計を取る場合も、新しくメッセージ統計ハンドラクラスを作成すればよく、既存のクラスをほとんど変更せずに実現できる。

Copyright © 2004-2006 Multisoft-lab   All rights reserved.