我们的场景是这样的 - 对于我们的中央Web服务,我们目前正在使用分布式缓存解决方案,我们的NHibernate实现用于二级缓存。
有时,我们的缓存服务器出现故障,因此我们在Web服务中收到NHibernate异常,基于此我们执行以下操作:
1.如果它是一个与缓存服务器相关的异常,我们将进入故障转移模式并重建我们的NHibernate会话工厂,而不需要二级缓存支持
2.向我们的网络服务的客户提出不可恢复的例外
当流量很高时,我们会在我们的网络服务客户端上获得许多此类例外。
展望未来我们希望确保不会向客户端抛出任何异常,因此我们正在考虑执行以下操作:
1.保留NHibernate会话工厂的2个实例 - 一个支持二级缓存,一个不支持
2.在缓存服务器异常上,使用不带第二级缓存支持的Factory重试请求,直到缓存服务器重新联机,然后使用具有二级缓存支持的工厂恢复
所以,基本上我们会在两个NHibernate Session Factories之间切换。
如果有人可以,那会很棒:
1.提供有关处理NHibernate二级缓存的故障转移的任何指示
2.指出在运行中切换会话工厂的任何缺陷
感谢。