これらのアプリケーション間の基本的なメッセージングを容易にするために、いくつかの ASP.NET MVC アプリケーション内で ServiceStack.Redis を使用しています。1 つのアプリケーション内に、サブスクリプションを設定し、アプリケーションが関心のあるメッセージを処理するクラスがあります。たとえば、次のようになります。
public MessageBus(IRedisClientsManager redisClientsManager)
{
Thread subscriptionThread = new Thread(() => {
try
{
using (var redisClient = redisClientsManager.GetClient())
using (var subscription = redisClient.CreateSubscription())
{
subscription.OnMessage = (channel, message) =>
{
handleMessage(message);
};
subscription.SubscribeToChannels("MyChannel");
}
}
catch (Exception ex)
{
ErrorLog.GetDefault(null).Log(new Error(ex));
}
});
subscriptionThread.Start();
}
「SubscribeToChannels」はブロックされているため、別のスレッドで実行しています。MVC アプリケーションが実行されている間ずっとこのスレッドを存続させたいのですが、なんらかの例外が発生した場合にスレッドが停止するか、Redis への接続が停止するのではないかと懸念しています。
私の質問は、サブスクリプションが開いている間に発生する可能性のある例外 (接続障害、タイムアウトなど) から回復する方法の例はありますか?