消息处理程序的建议生命周期是多少?
我当前的实现引发了一些问题,特别是在数据访问 (NHibernate) 方面。
我们当前的实现如下:
客户端应用程序(网络)
将消息发送到队列(在内存、msmq、azure 中)
Worker 应用程序(Windows 服务)
轮询队列,并将消息传递给注册的处理程序。
当我们初始化工作线程时,我们注册我们的处理程序。处理程序是延迟加载的(使用 Lazy<T>
),因此直到队列处理器实际启动(在不同的线程上)时才会创建它们。
当处理程序初始化时,我们会填写它们的依赖项,并将它们保存在内存中,直到队列处理器关闭。
我们遇到的一个问题是,我们现在对队列处理器上的所有处理程序使用单个 NHibernate ISession。似乎更好的解决方案是在队列处理器的每个周期上重新创建处理程序,这意味着每个处理程序都可以拥有自己的 ISession。
推荐的方法是什么?
最佳答案
由于处理程序直接与处理消息的操作相关联,因此它们的生命周期应该相同。
如果您使用某种工作单元(NHibernate ISession),则最好为每个传输消息配备一个工作单元,如 xelibrion 所说。一条传输消息可以包含更多逻辑(应用程序)消息,如果它们以同一物理消息到达,则应一起处理这些消息。
这是在 NServiceBus 和 NanoMessageBus 中完成的方式。
关于.net - 消息处理程序的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6755431/