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

1.3.4 Pushモデルのデータ管理

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


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

イベントチャネルは、サプライヤからイベントデータを受信します。受信したイベントデータは、イベントチャネル内に蓄積します。次に、接続しているすべてのコンシューマにイベントデータを送信します。送信を完了すると、イベントチャネル上のイベントデータを削除します。
イベントデータの送信、受信、削除までの処理について以下に示します。イベントチャネルでは、すべてのコンシューマにPushを発行した(4)の後に、イベントチャネル上のイベントデータを削除します。



  1. コンシューマ1およびコンシューマ2がイベントチャネルに接続します。

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

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

  4. イベントチャネルからコンシューマ2にイベントデータを送信します。送信後、イベントチャネルはイベントデータを削除します。


(2) 送信スレッド

送信スレッドは、イベントチャネルからコンシューマにイベントデータを送信するスレッドです。
1つの送信スレッドにより4つのコンシューマに送信する場合の例を以下に示します。サプライヤからコンシューマまでのイベントデータの送受信処理について説明します。



  1. サプライヤからイベントチャネルにイベントデータを送信します。イベントチャネルのPush処理部に、一時的にイベントデータを蓄積します。

  2. イベントチャネルのPush処理部から送信スレッドにイベントデータを渡します。イベントデータを送信スレッドに渡すと、イベントチャネルは蓄積したイベントデータを削除します。

  3. 送信スレッドは、接続しているコンシューマに対してイベントデータを送信します。


コンシューマが多数存在する場合は、essetcnfコマンド/essetcnfchnlコマンドの送信スレッド数(-sthinitオプション/-sthmaxオプション)を増やすと、イベントデータのコンシューマへの到達時間を均一化できます。

上図では、送信スレッドが1つであるため、4つのコンシューマに対して送信しています。送信スレッドを2つにした場合の例を以下に示します。4つのコンシューマを2つのブロックに分割し、それぞれのブロックに1つの送信スレッドが対応しています。送信スレッドは並行に動作するため、コンシューマとの間のイベントデータの到達時間の遅延を小さくできます。


イベントチャネルとコンシューマ間のネットワークのオーバヘッドが均一なものとして、送信スレッドを複数にした場合の処理を以下に説明します。


  1. サプライヤからイベントチャネルにイベントデータを送信します。イベントチャネルのPush処理部に一時的にイベントデータを蓄積します。

  2. イベントチャネルのPush処理部から2つの送信スレッドに順にイベントデータを渡します。接続しているコンシューマをブロック分割し、ブロックに1つの送信スレッドを割り当てます。イベントデータをすべての送信スレッドに渡すと、イベントチャネルは蓄積したイベントデータを削除します。

  3. 送信スレッド1は、割り当てられたブロックのコンシューマ1およびコンシューマ2にイベントデータを送信します。

  4. 送信スレッド2は、割り当てられたブロックのコンシューマ3およびコンシューマ4にイベントデータを送信します。



注意

  • コンシューマがイベントデータを受け取ったことを確認しない場合は「-oneway yes」を、確認する場合は「-oneway no」を指定してください。
    なお、「-oneway no」を指定すると、イベントサービスは送信するすべてのコンシューマがデータを受け取ったことを確認するため、復帰が遅いコンシューマが存在する場合は、Pushモデルの配信処理全体が遅延する可能性があります。

  • コンシューマへのイベントデータ送信時に通信エラーとなった場合、イベントチャネルはそのコンシューマに対して、以後のイベントデータを送信しません。通信エラーとなった場合でもイベントデータを送信したい場合は、「-chksend no」を指定してください(「-oneway no」指定時に有効)。

  • コンシューマ側のアプリケーションでは、アプリケーション終了時に、イベントチャネルに対して必ずdisconnectメソッドを発行してください。イベントチャネルに対してdisconnectメソッドを発行しないでアプリケーションを終了すると、アプリケーション終了後に再度アプリケーションを起動した場合に、同一のイベントデータが複数個配信されてしまいます。