EIP / Message


Message

  • ある企業にふたつのアプリケーションがあり、両者はメッセージチャネルを使い、メッセージングによってやりとりする。
  • それではメッセージチャネルによってつながった二つのアプリケーションはどうやって情報を交換するのか。
  • メッセージチャネルはデータが水のように片方から入り、もう一方から出てくるパイプだと考えられる。しかし、実際にはデータには単位があるので、チャネルはそのデータの単位を転送しなければならない。
  • データを転送するとはどういうことか?メモリ空間を共有していれば、データのメモリ上のアドレスを示すポインタを転送すればよい。
  • メモリ空間が別々である場合には、データをバイトストリームに変換しなければならない。送り手がデータをバイトストリームにマーシャルし、受け手側で元々の形式にアンマーシャルする。
  • つまり、メッセージングは個別のデータの単位を送信するのであり、それも、送り手がマーシャルし、受け手がアンマーシャルする。したがって、受け手は元のデータのローカルコピーを持つことになる。したがって、メッセージングチャネルでデータを転送するのに適した形でデータをラップするシンプルなやり方があればよい。

情報をメッセージにパッケージングしよう。メッセージとはメッセージングシステムがメッセージチャネルを通じて転送できるデータレコードのことだ。


  • このように、メッセージングシステムを通じて転送されるデータはメッセージングチャネルを通じて送信されるメッセージに分解される。
  • メッセージの基本構成要素
    • ヘッダー:メッセージングシステムが扱う情報で、転送されるデータやその送り元、受け手などについて説明する。
    • 本文:送信されるデータ、通常メッセージングシステムには無視され、そのまま転送される。
  • この考え方はメッセージング独自のものではない。手紙やEメール、TCP/IPのパケットなど
  • メッセージングシステムにとって、メッセージは全て同じ。しかし、アプリケーションプログラマにとってはそうではない。他のアプリケーションにあるプロシージャをキックするのに使うコマンドメッセージ。他のアプリケーションにデータを送るのに使うドキュメントメッセージ。他のアプリケーションに変化を通知するのに使うイベントメッセージ。応答が必要な場合に使うリクエスト-リプライなど。
  • アプリケーションで送るメッセージが一つのメッセージで収まりきらない場合には、シーケンス(170)をつかう。データに賞味期限がある場合にはメッセージの期限切れ(176)。色々な送り手と受け手がメッセージ内のデータ形式に合意しなければならないのであれば、フォーマットを標準データモデルとして定義する。
  • 以下は例