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



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

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

Special似乎为这种IIS应用程序池行为推荐了两个选项:您可以禁用超时,也可以通过不时发送预热请求来保持应用程序池联机。这将自动重新启动应用程序池,以便尽快处理任何消息。

有关更多详细信息,请查看:http://docs.particular.net/servicepulse/troubleshooting#causes-和解决方案

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

然而,在一些用例中,web应用程序处理消息非常有意义。

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

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

在任何情况下,这些常见的用例通常会导致启动的web应用程序不关心队列中等待它的任何消息。这是因为处理程序将从空缓存中删除缓存项,或者处理远远超过其使用寿命的通知。

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

最新更新