消息处理程序的建议生命周期是多少?
我目前的实现引发了一些问题,特别是涉及数据访问(NHibernate)时。
我们目前的实施如下:
客户端应用程序(网络)
将消息发送到队列(在内存中,msmq,azure)
工作人员申请(Windows服务)
轮询队列,并将消息传递给注册的处理程序。
当我们初始化worker时,我们注册我们的处理程序。处理程序是延迟加载的(使用Lazy<T>
),因此在队列处理器实际启动之前(在不同的线程上)不会创建它们。
当处理程序 初始化时,我们会填写它们的依赖项并将它们放在内存中,直到队列处理器关闭。
我们遇到的一个问题是,我们现在正在为队列处理器上的所有处理程序使用单个NHibernate ISession。似乎更好的解决方案是在队列处理器的每个循环上重新创建处理程序,这意味着每个处理程序都可以拥有它自己的ISession。
推荐的方法是什么?
答案 0 :(得分:3)
由于处理程序与处理消息的操作直接相关,因此它们的生命周期应该相同。
如果你使用某种工作单元(NHibernate ISession),那么最好每个传输消息有一个作为xelibrion sais。一条传输消息可能包含更多逻辑(应用程序)消息,如果它们到达同一物理消息,则应一起处理。
这是在NServiceBus和NanoMessageBus中完成的方式。
答案 1 :(得分:1)
我更喜欢每个传输消息的会话