サーバーと通信する C++ アプリケーションがあります。一部のデータをサーバーに発行します。サーバー障害の例外を処理しているときに、この懸念が生じました。サーバーに問題が発生したときに接続によってスローされた例外を処理し、サーバーへの再接続を試みる必要があります。関連する疑似コードを以下に投稿しました。
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
//handle error, reconnect and create a new session
}
私が懸念しているのは、この例外を処理するときに、再接続してセッションを再度作成する必要があることです。セッションを再度作成するためのコードは、例外をスローする可能性があります。したがって、エラー処理コードには、次のように、元の catch ブロック内に try - catch ブロックが再び含まれます。
try {
publisher->publishData(data);
} catch (const ServerDownException& ex) {
publisher->initialize();
publisher->openSocket();
try {
publisher->createSession();
} catch (const SessionException& tx) {
//session creation error
}
publisher->publishData(data);//after re-connecting, publish data again
}
私の質問は、このようにネストされた try - catch を使用しても大丈夫ですか? そうでなければ、これは単なる悪い設計ですか?もしそうなら、これを達成するための最良の方法は何ですか?
PS .: 私のコードは C++ ですが、質問は一般的なものだと思います。ありがとうございました。