TIBCO EMSサーバーがフェイルオーバーを試行している間、クライアントは何をすべきですか?
質問
TIBCO EMSユーザーガイド(pg 292)の説明:
バックアップサーバーは、無期限に動作します、A) プライマリサーバーまたはB)プライマリサーバーに再接続します。それはまた言う クライアントは、切り替えが成功するとフェイルオーバー通知を受け取ることがあります(TIBCO EMS .NETリファレンスpg 220も参照してください)。
これらの事実から派生した質問がいくつかあります...
-
サーバーがフェイルオーバー/再接続を試行しているときに、クライアント側でどのようなエラーが発生しますか?
-
クライアントからの適切な応答は何ですか?
- 動作するまでConnectionFactoryから新しいConnectionオブジェクトを取得しますか?
- フェイルオーバー通知を待ちますか? (現在、現在のConnectionインスタンスは修正されていますか?または新しいインスタンスを取得する必要がありますか?)
シナリオが明確であり、関連する情報やアドバイスがあれば幸いです。
解決
少なくとも上記の#1に答えることができます。
Tibems.SetExceptionOnFTSwitch(true);を有効にした場合サーバーがクライアントに送信するメッセージをキャプチャする例外ハンドラーを設定すると、次のように表示されます。
単一サーバー、非フォールトトレラント接続障害の場合: "接続が終了しました"。
フォールトトレラントな接続障害の場合: "接続が"へのフォールトトレラント切り替えを実行しました
接続がダウンしているときに公開しようとすると、TIBCO.EMS.IllegalStateExceptionがスローされます。メッセージ。
上記の#2については、EMSライブラリが可能な限り処理できるようにすることが答えだと思います。 EMS再接続機能が動作するようになったら、サーバーが再び使用可能になるまで正常に再接続を試行し、再接続すると問題が発生しないようになりました。唯一の落とし穴は、おそらくems接続が戻る前にメッセージを公開しようとした場合です。これが例外ハンドラーの出番です。フェイルオーバーモードになったことを通知されると、パブリッシャー側で例外処理を調整して、接続が戻るまでエラーを抑制できます。私が知らないことは、すべての再接続試行を使い果たしたことをどのように伝えるかです。
とにかく、私たちの2つの世界はEMSに関しては密接に関連しているようです。
他のヒント
TEMS(Tibco EMS-WCF用Tibco製品)を使用しているため、カスタムバインディングになります。サーバーをバウンスして強制的に切り替えを行うなどの方法でそれを破ろうとしましたが、本当にうまくいきます。クライアントの確認以外には何もできないため、1.1ではなくバージョン1.2を使用していることを確認してください。