消息处理程序的推荐寿命是多少?
我当前的实现引发了一些问题,尤其是在数据访问(NHibernate)方面。
我们目前的实现如下:
客户端应用程序(Web)
将消息发送到队列(在内存、msmq、azure 中)
Worker 应用程序(Windows 服务)
轮询队列,并将消息传递给注册的处理程序。
当我们初始化工作者时,我们注册我们的处理程序。处理程序是延迟加载的(使用Lazy<T>
),因此在队列处理器实际启动(在不同的线程上)之前不会创建它们。
初始化处理程序时,我们填写它们的依赖关系,它们会一直保存在内存中,直到队列处理器关闭。
我们遇到的一个问题是,我们现在对队列处理器上的所有处理程序使用单个 NHibernate ISession。似乎更好的解决方案是在队列处理器的每个周期上重新创建处理程序,这意味着每个处理程序都可以拥有自己的 ISession。
推荐的方法是什么?