我在几个 ASP.NET MVC 应用程序中使用 ServiceStack.Redis,以促进这些应用程序之间的基本消息传递。在一个应用程序中,我有一个类来设置订阅并处理应用程序感兴趣的任何消息,例如:
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 的连接将停止。
我的问题是:是否有任何示例说明如何从订阅打开时可能发生的异常(连接失败、超时等)中恢复?