在 ASP.NET MVC 应用程序中处理 NServiceBus 消息

Handling NServiceBus messages in ASP.NET MVC app

在 ASP.NET MVC 应用程序中处理 NServiceBus 消息是否安全,因为应用程序池可以在空闲时间后回收?假设所有消息都应该尽快由处理程序处理(回收应用程序池后不可能)。

当然我们可以禁用空闲超时选项,但这是一个好习惯吗?

对于这种 IIS 应用程序池行为,特别推荐两种选择:您可以禁用超时,或者通过不时发送预热请求使应用程序池保持在线。这将自动重新启动应用程序池,以便尽快处理任何消息。

更多详情,请查看: http://docs.particular.net/servicepulse/troubleshooting#causes-and-solutions

在 Web 应用程序中处理具有商业价值的消息并不是最好的主意,因为正如您所提到的,保持 Web 应用程序的活动可能存在问题。任何这样做的尝试都是一种 hack,因此通常更好的做法是在 NServiceBus 主机进程托管的端点中处理这些消息。

但是,在一些用例中,Web 应用程序处理消息非常有意义。

一个非常常见的用例是 Web 应用程序订阅事件以了解事情何时发生变化。这使 Web 应用程序能够删除该项目的缓存(允许在下一个请求时从 Web 浏览器重新加载新更新的数据)或者甚至用新更新的数据预填充缓存,如果该数据包含在消息中。

另一个很好的用例是实时通知。事实上,消息处理程序可以在服务器上响应这些通知,然后转身并通过 AJAX 请求或 SignalR 将它们广播到浏览器。

无论如何,这些常见用例通常会导致这样一种情况:正在启动的 Web 应用程序不关心队列中等待它的任何消息。这是因为处理程序会从空缓存中删除缓存项,或者处理已过使用寿命的通知。

这就是为什么 Web 应用程序通常会使用选项在启动时清除输入队列,因为这些消息对刚启动的 Web 应用程序没有用。