ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(イベントサービス編)

1.3.5 Pullモデルのデータ管理

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


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

  最初に、イベントチャネルはコンシューマからイベントデータの引き出し要求を受けます。次に、イベントチャネルはサプライヤからイベントデータを引き出します。イベントデータをイベントチャネル内に蓄積し、引出しを要求したコンシューマに送信します。他に接続しているすべてのコンシューマがイベントデータを受信すると、イベントチャネルはイベントデータを削除します。
  イベントデータの送受信の処理概要について以下に示します。イベントチャネルは、1つのデータに対して接続中のすべてのコンシューマがpullを発行した後((7)の復帰後)、イベントチャネル上のデータ((4)で獲得したデータ)を削除します。



  1. サプライヤがイベントチャネルに接続します。

  2. コンシューマ1からイベントチャネルにイベントデータの送信を要求します。

  3. イベントチャネルからサプライヤにイベントデータの送信を要求します。

  4. サプライヤからイベントチャネルにイベントデータを送信します。

  5. イベントチャネルからコンシューマ1にイベントデータを送信します。

  6. コンシューマ2からイベントチャネルにイベントデータの送信を要求します。

  7. 3、4と同様の処理の後、イベントチャネルからコンシューマ2にイベントデータを送信します。その後、イベントチャネルはデータを削除します。


(2) 複数のサプライヤとのイベント通信

  1つのイベントチャネルに複数のサプライヤを接続した場合、イベントチャネルからサプライヤへのイベントデータの引き出し要求は、最初に接続したサプライヤに対して出されます。他のサプライヤは、接続はできますが、イベント通信はできません。イベント通信中のサプライヤを切断すると、次に接続したサプライヤがイベント通信を行います。


(3) イベントデータの蓄積

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



  1. サプライヤおよびコンシューマ1は、connect( )によりイベントチャネルに接続します。

  2. コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○は、サプライヤからコンシューマ1に送られます。この時点では、まだコンシューマ2が接続されていません。そのため、イベントチャネルは、イベントデータ○を削除します。

  3. コンシューマ2は、connect( )によりイベントチャネルに接続します。

  4. コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がサプライヤからコンシューマ2に送られます。この時点では、コンシューマ1が接続しているため、イベントデータをイベントチャネルに蓄積します。

  5. コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ●は、イベントチャネルからコンシューマ1に送られます。この時点では、イベントデータ●が蓄積した段階で接続していたコンシューマは存在しないため、イベントチャネルはイベントデータ●を削除します。


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



  1. サプライヤ、コンシューマ1、およびコンシューマ2は、connect()によりイベントチャネルに接続します。

  2. コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●は、サプライヤからコンシューマ2に送られます。この時点でコンシューマ1が接続しているため、イベントデータ●をイベントチャネルに蓄積します。

  3. 蓄積したイベントデータ●は、蓄積してからの時間が生存時間を超えたため、イベントチャネルから削除されます。