2

消息处理程序的推荐寿命是多少?

我当前的实现引发了一些问题,尤其是在数据访问(NHibernate)方面。

我们目前的实现如下:

客户端应用程序(Web)
将消息发送到队列(在内存、msmq、azure 中)

Worker 应用程序(Windows 服务)
轮询队列,并将消息传递给注册的处理程序。

当我们初始化工作者时,我们注册我们的处理程序。处理程序是延迟加载的(使用Lazy<T>),因此在队列处理器实际启动(在不同的线程上)之前不会创建它们。

初始化处理程序,我们填写它们的依赖关系,它们会一直保存在内存中,直到队列处理器关闭。

我们遇到的一个问题是,我们现在对队列处理器上的所有处理程序使用单个 NHibernate ISession。似乎更好的解决方案是在队列处理器的每个周期上重新创建处理程序,这意味着每个处理程序都可以拥有自己的 ISession。

推荐的方法是什么?

4

2 回答 2

3

由于处理程序与处理消息的操作直接相关,因此它们的生命周期应该相同。

如果您使用某种工作单元(NHibernate ISession),最好为每个传输消息设置一个 xelibrion sais。一个传输消息可以包含更多逻辑(应用程序)消息,如果它们以相同的物理消息到达,则应该一起处理这些消息。

这是在 NServiceBus 和 NanoMessageBus 中完成的方式。

于 2011-07-20T10:56:25.250 回答
1

我更喜欢每个传输消息的会话

于 2011-07-20T05:06:42.020 回答