2.2.4 一方送信メッセージの送信
(1) 一方送信メッセージを送信するときの流れ
トランザクション同期の場合と,トランザクション非同期の場合に分けて説明します。
(a) トランザクション同期の場合
ユニキャストまたはマルチキャストによる送信
トランザクション同期の一方送信メッセージの送信で,ユニキャストまたはマルチキャストによる送信の流れを次の図に示します。
図2-5 ユニキャストまたはマルチキャストによる送信の流れ(トランザクション同期)
![[図データ]](figure/zu020230.gif)
- 説明
- クライアントUAPから,ユニキャストまたはマルチキャストによる一方送信メッセージの送信要求を行います。
- TP1/EEは,出力キュー(OTQ)が閉塞状態でなければメッセージをUDP用送信バッファ(UOBF)に格納し,UAPにリターンします。
- UAPリターン後,TP1/EEはコミットが確定すると,指定された送信先にメッセージを送信します。
- 送達確認メッセージを受信することで,送信処理を完了します。
自プロセスあての送信
自プロセスあての送信の流れを次の図に示します。
図2-6 自プロセスあての送信の流れ
![[図データ]](figure/zu020240.gif)
- 説明
- クライアントUAPから,自プロセスあての一方送信メッセージの送信要求を行います。
- TP1/EEは,出力キューが閉塞状態でなければメッセージをUDP用送信バッファに格納し,UAPにリターンします。
- UAPリターン後,TP1/EEは同期点処理でのコミット確定後に,メッセージを入力キュー(ITQ)に登録します。
- 入力キューに登録されたメッセージは処理スレッドによって引き出されます。
- 処理スレッドがトランザクションを開始して,UAPにメッセージを引き渡します。
(b) トランザクション非同期の場合
ユニキャストまたはマルチキャストによる送信
トランザクション非同期の一方送信メッセージの送信で,ユニキャストまたはマルチキャストによる送信の流れを次の図に示します。
図2-7 ユニキャストまたはマルチキャストによる送信の流れ(トランザクション非同期)
![[図データ]](figure/zu020250.gif)
- 説明
- クライアントUAPから,ユニキャストまたはマルチキャストによる一方送信メッセージの送信要求を行います。
- TP1/EEは,出力キューが閉塞状態でなければメッセージをUDP用送信バッファに格納し,UAPにリターンします。
- UAPリターン後,TP1/EEは同期点処理でのコミット確定後にメッセージを出力キューに登録し,その際に通番を採番します。
- 送信スレッドに対して,メッセージ送信指示を行います。
- 送信スレッドは,未送信のメッセージを読み出し,指定された送信先にメッセージを送信します。
- 送達確認メッセージを受信すると,出力キューからメッセージを削除します。読み出していないメッセージがある場合,メッセージ読み出し要求を行います。
自プロセスあての送信
トランザクション非同期の場合,自プロセスあての送信の流れは,基本的には「ユニキャストまたはマルチキャストによる送信」と同様です。
ただし,自プロセスあての送信であるため,送信スレッドからのメッセージの送信先は,「(1)(a) トランザクション同期の場合」の「自プロセスあての送信」と同様,自プロセスのUAPとなります。
(2) 一方送信メッセージの一括送信
同一出力キュー(OTQ)上にある他プロセスあてのトランザクション非同期の一方送信メッセージを,最大1024件を一括で送信できます。一括で送信できるメッセージの数は,高速メッセージ送信関連定義のmch_send_lump_countオペランドで指定します。
一括送信できるのは,属性が同じメッセージだけです。次の属性ごとにまとめて一括送信します。
- メッセージ送信先で登録された処理キューの中で優先的に起動するかどうか
(ee_mch_cmtsend関数のpriority引数にEEMCH_HIまたはEEMCH_LOWを指定しているか)
- 通信方式がユニキャストかマルチキャストか
(ee_mch_cmtsend関数のflags引数にEENOFLAGSまたはEEMCH_MULTI_CLを指定しているか)
- メッセージが永続か非永続か
(ee_mch_cmtsend関数のflags引数にEEMCH_PERMANENCEを指定しているか)
なお,異なる属性のメッセージが出現した場合は,それまでにまとめたメッセージだけで一括送信します。
メッセージの一括送信は,出力キュー(OTQ)ごとの一方送信メッセージ数が多く,属性が同じ場合に活用できます。
(a) 一方送信メッセージを一括送信するときの流れ
一方送信メッセージを一括送信するときの流れについて説明します。ここでは,クライアントUAPからサーバへ非同期の一方送信メッセージを一括送信するときの流れを例に示します。この例では,高速メッセージ送信関連定義のmch_send_lump_countオペランドの指定値は16です。
図2-8 一方送信メッセージを一括送信するときの流れ
![[図データ]](figure/zu020251.gif)
- 説明
- 同一出力キュー(OTQ)に登録されている未送信メッセージを,16件読み出してまとめます。未送信メッセージが16件よりも少ない場合は,すべての未送信メッセージをまとめます。
- 指定された送信先に,まとめたメッセージを一括送信します。
- 送達確認メッセージを受信すると,出力キューからメッセージを削除します。読み出していないメッセージがある場合,メッセージ読み出し要求を行います。
(b) 一括送信時の注意事項
一方送信メッセージを一括で送信する場合,クライアント側とサーバ側のXTCのバージョンが一致している必要があります。
- 注意
- 製品バージョンの変更は,すべてのシステムを停止してから実施してください。バージョンが01-02以降のクライアントが稼働中に送信先のバージョンを変更する場合,次のことに注意してください。
- 送信先のバージョンを01-01以前から01-02以降に変更する場合
- メッセージを一括送信できるようになります。サービスグループレベルの出力キュー(OTQ)閉塞中に変更することをお勧めします。
- 送信先のバージョンを01-02以降から01-01以前に変更する場合
- 一方送信メッセージの欠落が発生するおそれがあるため変更しないでください。