基本的に、私は"DON'T DO THIS"センチネルのシナリオを持っています。センチネルは、このようなシナリオでは安全ではないので、私は .Configure(ライター)(ConnectionMultiplexerとしてSRC)を呼び出すことで、私のメインの接続がダウンしている場合は、次のStackExchange.Redis - 実行時に構成を変更するにはどうすればよいですか?
var main = "192.168.XXX.YY:6379,abortConnect=false";
var backup = "192.168.XXX.YY:6379,abortConnect=false";
IConnectionMultiplexer redis = ConnectionMultiplexer.Connect(main);
redis.ConnectionFailed += (src, args) =>
{
if ((src as ConnectionMultiplexer).Configuration != backup) {
using (var writer = new StringWriter()) {
writer.Write(backup);
(src as ConnectionMultiplexer).Configure(writer);
/**
* Just for checking. It does not save
**/
(src as ConnectionMultiplexer).GetDatabase().StringSet("aaa", "bbb");
}
}
};
だから、私は設定を変更実装しましたこれにより、ConnectionMultiplexerは新しい構成を使用できます。ただし、ConnectionMultiplexerは引き続き古いものを使用します。
質問:ConnectionFailedイベントでConnectionMultiplexer.configurationを変更するにはどうすればよいですか。それが受け入れられるかどう
最も明白な答えですが、アプリ全体に広がっているため同じインスタンスを保持する必要があります。たぶんイベントがすべての加入者に通知することができるかもしれませんが、私のアプリケーションのいくつかは、ConnectionMultiplexerの参照を含む元の動作を変更することはできません。とにかくありがとうございました。 –
私はあなたのコメントを期待していました。私は同様のことをやろうとしています。アプリケーションがMultiplixerではなくデータベースへのポインタを持っていなければならないと思っており、私はこのリファクタリングに取り組んでいます...安全な再設定と再接続でどこかに行けば、私は共有します。接続文字列に両方のホストを持っていて、maultiplixerが接続に失敗したシナリオを処理できるかどうかを確認しましたか? –
私は両方の接続を設定すると、私は複数のマスターの問題に終わるでしょう。そのような場合、StackExchange.redisはTieBreakerという概念を使用して「メイン」マスターを解決します。そのような機能が問題を安全に解決できるかどうかはわかりません。私は月曜日に確認します。 –