12.1.5 エージェントの可用性の確保
ローカルネットワークの複数のホストでスマートエージェントを起動すると,クライアントは,スマートエージェントの一つが不測の事態で終了した場合でも,オブジェクトへのバインドを続行できます。スマートエージェントが使用不能になると,そのスマートエージェントに登録されたすべてのオブジェクトインプリメンテーションは,別のスマートエージェントに自動的に再登録されます。ローカルネットワークで動作中のスマートエージェントがなければ,オブジェクトインプリメンテーションは新しいスマートエージェントにコンタクトできるまでリトライを続けます。
その際,C++アプリケーションはstdoutに「VisiBroker: Unable to locate agent. Will try every 15 seconds to locate agent.」というメッセージを出力します。ローカルネットワーク上でスマートエージェントを起動するか,agentaddrファイルにスマートエージェントが起動しているホストを指定してください。詳細については「12.5 ポイントツーポイント通信の使用」を参照してください。
スマートエージェントが終了しても,スマートエージェントが終了する前にクライアントとオブジェクトインプリメンテーションの間に確立されたコネクションは中断しないで継続します。ただし,クライアントが新たに_bind()リクエストを発行すると,新しいスマートエージェントにコンタクトされます。
これらのフォルトトレラントな機能を利用するために,特別なコーディングは必要ありません。ローカルネットワークの一つ以上のホストでスマートエージェントが起動されていることを確認すればよいだけです。
- 〈この項の構成〉
(1) クライアントの存在の確認
スマートエージェントは,クライアントがまだ接続されているかどうかを確認するために,各クライアントとの通信状態を一定時間ごとにチェックします。
チェック時に一定時間の間スマートエージェントとの通信が行われていないクライアントに対して,「Are You Alive」メッセージ(ハートビートメッセージ)を送信します。クライアントが応答しなければ,スマートエージェントはクライアントがコネクションを終了したものとみなします。
クライアントへのポーリング間隔は変更できません。
- 注
-
「クライアント」という用語の使用がオブジェクトまたはプロセスの機能を説明するとは限りません。オブジェクトリファレンスのためにスマートエージェントに接続するプログラムはどれもクライアントです。