Pullモデルでのイベントデータの管理について説明します。
(1) イベントデータの送受信
最初に、イベントチャネルはコンシューマからイベントデータの引き出し要求を受けます。次に、イベントチャネルはサプライヤからイベントデータを引き出します。イベントデータをイベントチャネル内に蓄積し、引出しを要求したコンシューマに送信します。他に接続しているすべてのコンシューマがイベントデータを受信すると、イベントチャネルはイベントデータを削除します。
イベントデータの送受信の処理概要について以下に示します。イベントチャネルは、1つのデータに対して接続中のすべてのコンシューマがpullを発行した後((7)の復帰後)、イベントチャネル上のデータ((4)で獲得したデータ)を削除します。
サプライヤがイベントチャネルに接続します。
コンシューマ1からイベントチャネルにイベントデータの送信を要求します。
イベントチャネルからサプライヤにイベントデータの送信を要求します。
サプライヤからイベントチャネルにイベントデータを送信します。
イベントチャネルからコンシューマ1にイベントデータを送信します。
コンシューマ2からイベントチャネルにイベントデータの送信を要求します。
3、4と同様の処理の後、イベントチャネルからコンシューマ2にイベントデータを送信します。その後、イベントチャネルはデータを削除します。
(2) 複数のサプライヤとのイベント通信
1つのイベントチャネルに複数のサプライヤを接続した場合、イベントチャネルからサプライヤへのイベントデータの引き出し要求は、最初に接続したサプライヤに対して出されます。他のサプライヤは、接続はできますが、イベント通信はできません。イベント通信中のサプライヤを切断すると、次に接続したサプライヤがイベント通信を行います。
(3) イベントデータの蓄積
イベントチャネルに蓄積したイベントデータは、接続中のコンシューマが取り出した後に削除されます。このときのイベントデータの蓄積から削除までの処理について以下に示します。
サプライヤおよびコンシューマ1は、connect( )によりイベントチャネルに接続します。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○は、サプライヤからコンシューマ1に送られます。この時点では、まだコンシューマ2が接続されていません。そのため、イベントチャネルは、イベントデータ○を削除します。
コンシューマ2は、connect( )によりイベントチャネルに接続します。
コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がサプライヤからコンシューマ2に送られます。この時点では、コンシューマ1が接続しているため、イベントデータをイベントチャネルに蓄積します。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ●は、イベントチャネルからコンシューマ1に送られます。この時点では、イベントデータ●が蓄積した段階で接続していたコンシューマは存在しないため、イベントチャネルはイベントデータ●を削除します。
イベントデータを蓄積してから削除するまでの時間は、essetcnfコマンドおよびessetcnfchnlコマンドの“イベントデータの生存時間”(-ltimeオプション)で指定します。この時間内に、コンシューマがイベントデータを受け取らなかった場合、イベントチャネルはイベントデータを自動削除します。
イベントデータの蓄積から削除までの処理について以下に示します。
サプライヤ、コンシューマ1、およびコンシューマ2は、connect()によりイベントチャネルに接続します。
コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●は、サプライヤからコンシューマ2に送られます。この時点でコンシューマ1が接続しているため、イベントデータ●をイベントチャネルに蓄積します。
蓄積したイベントデータ●は、蓄積してからの時間が生存時間を超えたため、イベントチャネルから削除されます。