Interstage Application Server アプリケーション作成ガイド (イベントサービス編)
目次 索引 前ページ次ページ

第1章 機能> 1.3 基礎知識> 1.3.1 通信モデル

1.3.1.6 Mixedモデルのデータ管理

 Mixedモデルでのイベントデータの管理について説明します。

(1) MultiCastモデルのイベントデータの送受信

 イベントデータのイベントチャネルでの送受信の概要を説明します。最初にイベントチャネルはサプライヤからイベントデータを受信します。受信したイベントデータをイベントチャネル内に蓄積します。蓄積した時点で接続中のコンシューマから取り出し要求があれば、イベントデータをコンシューマに送信します。接続しているすべてのコンシューマにイベントデータの送信を完了すると、イベントチャネルはイベントデータを削除します。その概要を以下に示します。

 上図のイベントデータの送信、受信、削除までの処理について以下に説明します。1つのデータに対して接続中のすべてのコンシューマがpullを発行した後(5と7の復帰後)、イベントチャネル上のデータを削除(2と3で送信されたデータ)します。

  1. コンシューマがイベントチャネルに接続します。
  2. サプライヤ1からイベントチャネルへ、イベントデータを送信します。
  3. サプライヤ2からイベントチャネルへ、イベントデータを送信します。
  4. コンシューマからイベントチャネルへ、イベントデータの送信を要求します。
  5. イベントチャネルからコンシューマへ、イベントデータを送信します。
  6. コンシューマからイベントチャネルへ、イベントデータの送信を要求します。
  7. イベントチャネルからコンシューマへ、イベントデータを送信します。その後、イベントチャネルはイベントデータを削除します。

(2) MultiCastモデルのイベントデータの蓄積

 イベントデータの蓄積について説明します。イベントチャネルに蓄積したイベントデータは、接続中のコンシューマが取り出した後に削除されます。このときのイベントデータの蓄積から削除までの処理について説明します。

  1. サプライヤとコンシューマ1はconnect( )によりイベントチャネルに接続します。
  2. サプライヤはイベントチャネルにイベントデータ○を送信します。イベントチャネルはコンシューマ1が接続中であるため、イベントデータを蓄積します。その後にコンシューマ2がconnect( )によりイベントチャネルに接続します。
  3. コンシューマ1はpull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントデータ○を蓄積した時点で接続していたのはコンシューマ1だけであるため、イベントチャネルはイベントデータ○を削除します。
  4. サプライヤはイベントチャネルにイベントデータ●を送信します。イベントチャネルはコンシューマ1とコンシューマ2が接続中であるため、イベントデータを蓄積します。
  5. コンシューマ2はpull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。
  6. コンシューマ1はpull( )によりイベントデータの引出しを要求します。イベントデータ●をコンシューマ1に送ります。イベントチャネルはイベントデータ●を削除します。

 ノーティフィケーションサービスのQoS機能でPriority(優先度付け)を指定することにより、イベントデータの蓄積方法を変更することができます。メッセージ単位にPriority(優先度付け)を指定した場合の、イベントデータの蓄積方法について説明します。ノーティフィケーションサービスのイベントチャネルに蓄積したイベントデータは、優先度の高いイベントデータから接続中のコンシューマに送信され、取り出した後に削除されます。このときのイベントデータの蓄積から削除までの処理について説明します。

  1. サプライヤとコンシューマはconnect( )によりイベントチャネルに接続します。
  2. サプライヤはノーティフィケーションサービスのイベントチャネルに優先度の低いイベントデータ○を送信します。ノーティフィケーションサービスのイベントチャネルはコンシューマが接続中であるため、イベントデータを蓄積します。
  3. サプライヤはノーティフィケーションサービスのイベントチャネルに優先度の高いイベントデータ●を送信します。ノーティフィケーションサービスのイベントチャネルはコンシューマが接続中であるため、イベントデータを蓄積します。
  4. コンシューマはpull( )によりイベントデータの引出しを要求します。優先度の高いイベントデータ●がコンシューマに送られます。ノーティフィケーションサービスのイベントチャネルはイベントデータ●を削除します。
  5. コンシューマはpull( )によりイベントデータの引出しを要求します。優先度の低いイベントデータ○をコンシューマに送ります。ノーティフィケーションサービスのイベントチャネルはイベントデータ○を削除します

 イベントデータを蓄積してから削除するまでの時間をessetcnfコマンドおよびessetcnfchnlコマンドの“イベントデータの生存時間”(-ltimeオプション)により指定することができます。この時間内にコンシューマがイベントデータを受け取らなかった場合、イベントチャネルはイベントデータを削除します。このときのイベントデータの蓄積から削除までの概要と処理について説明します。

  1. サプライヤとコンシューマ1は、connect( )によりイベントチャネルに接続します。
  2. サプライヤはイベントチャネルにイベントデータ○を送信します。イベントチャネルはコンシューマ1が接続中であるため、イベントデータを蓄積します。その後にコンシューマ2がconnect()によりイベントチャネルに接続します。
  3. コンシューマ1はpull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントデータ○を蓄積した時点で接続していたのはコンシューマ1だけであるため、イベントチャネルはイベントデータ○を削除します。
  4. サプライヤはイベントチャネルにイベントデータ●を送信します。イベントチャネルはコンシューマ1とコンシューマ2が接続中であるため、イベントチャネルを蓄積します。
  5. コンシューマ2はpull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。
  6. コンシューマ1がイベントデータ●の引出しを要求しないでイベントデータの生存時間を超えると、イベントチャネルはイベントデータ●を削除します。

 ノーティフィケーションサービスのQoS機能でTimeout(生存時間)を指定することにより、イベントデータを蓄積してから削除するまでの時間を設定することができます。メッセージ単位にTimeout(生存時間)を指定した場合の、イベントデータの蓄積方法について説明します。この時間内にコンシューマがイベントデータを受け取らなかった場合、ノーティフィケーションサービスのイベントチャネルはイベントデータを削除します。このときのイベントデータの蓄積から削除までの概要と処理について説明します。

  1. サプライヤとコンシューマはconnect( )によりイベントチャネルに接続します。
  2. サプライヤはノーティフィケーションサービスのイベントチャネルにイベントデータ○を送信します。ノーティフィケーションサービスのイベントチャネルはコンシューマが接続中であるため、イベントデータを蓄積します。
  3. サプライヤはノーティフィケーションサービスのイベントチャネルにイベントデータ●を送信します。イベントチャネルはコンシューマが接続中であるため、ノーティフィケーションサービスのイベントチャネルを蓄積します。
  4. コンシューマがイベントデータ●の引出しを要求しないでイベントデータの生存時間を超えると、ノーティフィケーションサービスのイベントチャネルはイベントデータ●を削除します。
  5. コンシューマはpull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマに送られます。イベントデータ○を蓄積した時点で接続していたのはコンシューマだけであるため、イベントチャネルはイベントデータ○を削除します。

(3) Point-To-Pointモデルのイベントデータの送受信

 Point-To-Pointモデルのイベントデータのイベントチャネルでの送受信の概要について説明します。最初に、イベントチャネルはサプライヤからイベントデータを受信します。受信したイベントデータをイベントチャネル内に蓄積します。蓄積した時点でコンシューマから取り出しの要求があれば、イベントデータをコンシューマに送信します。1つのコンシューマにイベントデータの送信が完了すると、イベントチャネルはイベントデータを削除します。

 上図のイベントデータの送信、受信、削除までの処理について以下に説明します。1つのイベントデータに対して1つのコンシューマがpullを発行した後(5と8の復帰後)、イベントチャネル上のイベントデータ(1と2で送信されたイベントデータ)を削除します。

  1. サプライヤ1からイベントチャネルへ、イベントデータ1を送信します。
  2. サプライヤ2からイベントチャネルへ、イベントデータ2を送信します。
  3. コンシューマ1がイベントチャネルに接続します。
  4. コンシューマ1からイベントチャネルへ、イベントデータの送信を要求します。
  5. イベントチャネルからコンシューマ1へ、イベントデータ1を送信します。その後、イベントチャネルはイベントデータ1を削除します。
  6. コンシューマ2がイベントチャネルに接続します。
  7. コンシューマ2からイベントチャネルへ、イベントデータの送信を要求します。
  8. イベントチャネルからコンシューマ2へ、イベントデータ2を送信します。 その後、イベントチャネルはイベントデータ2を削除します。

(4) Point-To-Pointモデルのイベントデータの蓄積

 Point-To-Pointモデルのイベントデータの蓄積について説明します。サプライヤが送信したイベントデータは、コンシューマの接続状態に関わらず、イベントチャネルに蓄積します。
 蓄積されたイベントデータは、1つのコンシューマが取り出された後に削除されます。

  1. サプライヤとコンシューマ1は、connect( )によりイベントチャネルに接続します。
  2. サプライヤは、イベントチャネルにイベントデータ○を送信します。イベントチャネルは、イベントデータを蓄積します。その後にコンシューマ2がconnect( )によりイベントチャネルに接続します。
  3. コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントチャネルは、イベントデータ○を削除します。
  4. サプライヤは、イベントチャネルにイベントデータ●を送信します。イベントチャネルは、イベントデータを蓄積します。
  5. コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。イベントチャネルは、イベントデータ●を削除します。

 なお、以下を指定した場合の動作は、MultiCastモデルの場合の動作と同様です。

(5) イベントデータの待ち合わせ時間

 構成情報の設定で述べた“待ち合わせ時間”(essetcnfコマンドの-wtimeオプション)について説明します。Mixedモデルでは、コンシューマからのイベントデータの引き出し時に、イベントチャネルにイベントデータが蓄積されていないと、サプライヤからのイベントデータの送信を待ち合わせます。環境設定で指定した時間内にイベントデータがイベントチャネルに渡る場合の例を以下の図に示します。待ち合わせ時間内にイベントデータを送受信する処理について説明します。

  1. コンシューマはpull( )を呼び出してイベントチャネルにイベントデータの送信を要求します。
  2. イベントチャネルは、イベントチャネルにイベントデータが存在しないと、サプライヤからのイベントデータの送信を待ち合わせます。
  3. サプライヤは、pushメソッドを実行してイベントチャネルにイベントデータを送信します。
  4. イベントチャネルはサプライヤからのイベントデータの受信を待ち合わせています。サプライヤからのイベントデータの受信が待ち合わせ時間内であればイベントデータを受信してコンシューマに送信します。
  5. コンシューマはpull( )の復帰によりイベントデータを受信します。

 待ち合わせ時間内とは、2から4までの時間が環境設定で指定した“待ち合わせ時間”より短い場合です。

 次にイベントデータが待ち合わせ時間を超えた場合の例を以下の図に示します。イベントデータの送受信が待ち合わせ時間を超えてしまった場合の処理について説明します。

  1. コンシューマはpull( )を呼び出してイベントチャネルへイベントデータの送信を要求します。
  2. イベントチャネルは、イベントチャネルにイベントデータが存在しないと、サプライヤからのイベントデータの送信を待ち合わせます。
  3. 待ち合わせ時間が環境設定で指定した値を超えました。
  4. イベントチャネルは待ち合わせ時間を超えたことをコンシューマに通知します。
  5. サプライヤはpushメソッドでイベントデータをイベントチャネルに送信します。
  6. イベントチャネルはイベントデータを破棄または蓄積します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005