Mixedモデルでのイベントデータの管理について説明します。
(1) MultiCastモデルのイベントデータの送受信
最初に、イベントチャネルはサプライヤからイベントデータを受信します。受信したイベントデータをイベントチャネル内に蓄積します。蓄積した時点で、接続中のコンシューマから取り出し要求があれば、イベントデータをコンシューマに送信します。接続しているすべてのコンシューマにイベントデータの送信を完了すると、イベントチャネルはイベントデータを削除します。
イベントデータの送信、受信、および削除の処理について以下に示します。1つのデータに対して接続中のすべてのコンシューマがpullを発行した後((5)と(7)の復帰後)、イベントチャネル上のデータ((2)と(3)で送信されたデータ)を削除します。
コンシューマがイベントチャネルに接続します。
サプライヤ1からイベントチャネルにイベントデータを送信します。
サプライヤ2からイベントチャネルにイベントデータを送信します。
コンシューマからイベントチャネルにイベントデータの送信を要求します。
イベントチャネルからコンシューマにイベントデータを送信します。
コンシューマからイベントチャネルにイベントデータの送信を要求します。
イベントチャネルからコンシューマにイベントデータを送信します。その後、イベントチャネルはイベントデータを削除します。
(2) MultiCastモデルのイベントデータの蓄積
イベントチャネルに蓄積したイベントデータは、接続中のコンシューマが取り出した後に削除されます。
イベントデータの蓄積から削除までの処理について以下に示します。
サプライヤおよびコンシューマ1は、connect( )によりイベントチャネルに接続します。
サプライヤは、イベントチャネルにイベントデータ○を送信します。イベントチャネルは、コンシューマ1が接続中であるため、イベントデータを蓄積します。その後、コンシューマ2がconnect( )によりイベントチャネルに接続します。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントデータ○を蓄積した時点では、コンシューマ1だけに接続していたため、イベントチャネルはイベントデータ○を削除します。
サプライヤは、イベントチャネルにイベントデータ●を送信します。イベントチャネルは、コンシューマ1およびコンシューマ2が接続中であるため、イベントデータを蓄積します。
コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ●をコンシューマ1に送ります。イベントチャネルは、イベントデータ●を削除します。
ノーティフィケーションサービスのQoS機能では、Priority(優先度付け)を指定することにより、イベントデータの蓄積方法を変更できます。
メッセージ単位にPriority(優先度付け)を指定した場合、ノーティフィケーションサービスのイベントチャネルに蓄積したイベントデータは、優先度の高いイベントデータから接続中のコンシューマに送信され、取り出した後に削除されます。
このときのイベントデータの蓄積から削除までの処理について以下に示します。
サプライヤおよびコンシューマは、connect( )によりイベントチャネルに接続します。
サプライヤは、ノーティフィケーションサービスのイベントチャネルに優先度の低いイベントデータ○を送信します。ノーティフィケーションサービスのイベントチャネルは、コンシューマが接続中であるため、イベントデータを蓄積します。
サプライヤは、ノーティフィケーションサービスのイベントチャネルに優先度の高いイベントデータ●を送信します。ノーティフィケーションサービスのイベントチャネルは、コンシューマが接続中であるため、イベントデータを蓄積します。
コンシューマは、pull( )によりイベントデータの引出しを要求します。優先度の高いイベントデータ●がコンシューマに送られます。ノーティフィケーションサービスのイベントチャネルは、イベントデータ●を削除します。
コンシューマは、pull( )によりイベントデータの引出しを要求します。優先度の低いイベントデータ○をコンシューマに送ります。ノーティフィケーションサービスのイベントチャネルは、イベントデータ○を削除します。
イベントデータを蓄積してから削除するまでの時間は、essetcnfコマンドおよびessetcnfchnlコマンドの“イベントデータの生存時間”(-ltimeオプション)で指定します。この時間内にコンシューマがイベントデータを受け取らなかった場合、イベントチャネルはイベントデータを削除します。
このときのイベントデータの蓄積から削除までの概要と処理について以下に示します。
サプライヤおよびコンシューマ1は、connect( )によりイベントチャネルに接続します。
サプライヤは、イベントチャネルにイベントデータ○を送信します。イベントチャネルは、コンシューマ1が接続中であるため、イベントデータを蓄積します。その後、コンシューマ2がconnect()によりイベントチャネルに接続します。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントデータ○を蓄積した時点では、コンシューマ1だけに接続していたため、イベントチャネルは、イベントデータ○を削除します。
サプライヤは、イベントチャネルにイベントデータ●を送信します。イベントチャネルは、コンシューマ1およびコンシューマ2が接続中であるため、イベントチャネルを蓄積します。
コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。
コンシューマ1がイベントデータ●の引出しを要求しないでイベントデータの生存時間を超えると、イベントチャネルは、イベントデータ●を削除します。
ノーティフィケーションサービスのQoS機能では、Timeout(生存時間)を指定することで、イベントデータを蓄積してから削除するまでの時間を設定します。
メッセージ単位にTimeout(生存時間)を指定した場合、この時間内にコンシューマがイベントデータを受け取らなかった場合、ノーティフィケーションサービスのイベントチャネルは、イベントデータを削除します。
このときのイベントデータの蓄積から削除までの概要と処理について以下に示します。
サプライヤおよびコンシューマは、connect( )によりイベントチャネルに接続します。
サプライヤは、ノーティフィケーションサービスのイベントチャネルにイベントデータ○を送信します。ノーティフィケーションサービスのイベントチャネルは、コンシューマが接続中であるため、イベントデータを蓄積します。
サプライヤは、ノーティフィケーションサービスのイベントチャネルにイベントデータ●を送信します。イベントチャネルは、コンシューマが接続中であるため、ノーティフィケーションサービスのイベントチャネルを蓄積します。
コンシューマがイベントデータ●の引出しを要求しないでイベントデータの生存時間を超えると、ノーティフィケーションサービスのイベントチャネルは、イベントデータ●を削除します。
コンシューマは、pull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマに送られます。イベントデータ○を蓄積した時点では、コンシューマだけに接続していたため、イベントチャネルはイベントデータ○を削除します。
(3) Point-To-Pointモデルのイベントデータの送受信
最初に、イベントチャネルはサプライヤからイベントデータを受信します。受信したイベントデータをイベントチャネル内に蓄積します。蓄積した時点で、コンシューマから取り出しの要求があれば、イベントデータをコンシューマに送信します。1つのコンシューマにイベントデータの送信が完了すると、イベントチャネルはイベントデータを削除します。
イベントデータの送信、受信、および削除処理について以下に示します。1つのイベントデータに対して1つのコンシューマがpullを発行した後((5)と(8)の復帰後)、イベントチャネル上のイベントデータ((1)と(2)で送信されたイベントデータ)を削除します。
サプライヤ1からイベントチャネルにイベントデータ1を送信します。
サプライヤ2からイベントチャネルにイベントデータ2を送信します。
コンシューマ1がイベントチャネルに接続します。
コンシューマ1からイベントチャネルにイベントデータの送信を要求します。
イベントチャネルからコンシューマ1にイベントデータ1を送信します。その後、イベントチャネルはイベントデータ1を削除します。
コンシューマ2がイベントチャネルに接続します。
コンシューマ2からイベントチャネルにイベントデータの送信を要求します。
イベントチャネルからコンシューマ2にイベントデータ2を送信します。 その後、イベントチャネルは、イベントデータ2を削除します。
(4) Point-To-Pointモデルのイベントデータの蓄積
サプライヤが送信したイベントデータは、コンシューマの接続状態に関わらず、イベントチャネルに蓄積します。蓄積されたイベントデータは、1つのコンシューマが取り出された後に削除されます。
イベントデータの蓄積処理について以下に示します。
サプライヤおよびコンシューマ1は、connect( )によりイベントチャネルに接続します。
サプライヤは、イベントチャネルにイベントデータ○を送信します。イベントチャネルは、イベントデータを蓄積します。その後、コンシューマ2がconnect( )によりイベントチャネルに接続します。
コンシューマ1は、pull( )によりイベントデータの引出しを要求します。イベントデータ○がコンシューマ1に送られます。イベントチャネルは、イベントデータ○を削除します。
サプライヤは、イベントチャネルにイベントデータ●を送信します。イベントチャネルは、イベントデータを蓄積します。
コンシューマ2は、pull( )によりイベントデータの引出しを要求します。イベントデータ●がコンシューマ2に送られます。イベントチャネルは、イベントデータ●を削除します。
なお、以下の場合は、MultiCastモデルの場合の動作と同様です。
ノーティフィケーションサービスのQoS機能においてPriorityを指定した場合
Priorityについては、“1.11.1 QoSプロパティ”を参照してください。
イベントデータの生存時間(essetcnfコマンドまたはessetcnfchnlコマンドの-ltimeオプション)を指定した場合
ノーティフィケーションサービスのQoS機能においてTimeoutを指定した場合
Timeoutについては、“1.11.1 QoSプロパティ”を参照してください。
(5) イベントデータの待ち合わせ時間
Mixedモデルでは、コンシューマからのイベントデータの引き出し時に、イベントチャネルにイベントデータが蓄積されていないと、サプライヤからのイベントデータの送信を待ち合わせます。“待ち合わせ時間”は、essetcnfコマンドの-wtimeオプションを指定して設定します。
環境設定で指定した時間内にイベントデータを送受信する処理について以下に示します。
コンシューマは、pull( )を呼び出してイベントチャネルにイベントデータの送信を要求します。
イベントチャネルは、イベントチャネルにイベントデータが存在しないと、サプライヤからのイベントデータの送信を待ち合わせます。
サプライヤは、pushメソッドを実行してイベントチャネルにイベントデータを送信します。
イベントチャネルは、サプライヤからのイベントデータの受信を待ち合わせています。サプライヤからのイベントデータの受信が待ち合わせ時間内であれば、イベントデータを受信してコンシューマに送信します。
コンシューマは、pull( )の復帰によりイベントデータを受信します。
注意
待ち合わせ時間内とは、2から4までの時間が環境設定で指定した“待ち合わせ時間”より短い場合です。
次に、イベントデータの送受信が待ち合わせ時間を超えてしまった場合の処理について以下に示します。
コンシューマは、pull( )を呼び出してイベントチャネルへイベントデータの送信を要求します。
イベントチャネルは、イベントチャネルにイベントデータが存在しないと、サプライヤからのイベントデータの送信を待ち合わせます。
待ち合わせ時間が環境設定で指定した値を超えました。
イベントチャネルは、待ち合わせ時間を超えたことをコンシューマに通知します。
サプライヤは、pushメソッドでイベントデータをイベントチャネルに送信します。
イベントチャネルは、イベントデータを破棄または蓄積します。