ASP.NET应用程序可以处理NServiceBus事件吗?

Aar*_*ght 6 asp.net asp.net-mvc nservicebus publish-subscribe

大多数(如果不是全部)ASP.NET(或MVC)的NSB示例都让Web应用程序使用Bus.Send并可能注册一个简单的回调来发送消息,这本质上就是我在我的应用程序中使用它的方式.

我想知道的是,在同一个ASP.NET应用程序中处理消息是否可能和/或是否有意义.

我问的主要原因是缓存.这个过程可能会是这样的:

  1. 用户从Web应用程序发起请求.
  2. Web应用程序向独立应用程序服务器发送消息,并将更改记录在本地数据库中.
  3. 在来自同一用户的未来页面请求中,Web应用程序知道更改并将其列为"挂起"状态.
  4. 一堆东​​西发生在后端,最终请求被批准或拒绝.发布引用原始请求的事件.
  5. 此时,Web应用程序应该开始显示最新信息.

现在,在一个真正的Web应用程序中,这个待处理的请求几乎肯定会被缓存,很可能很长一段时间,因为否则应用程序必须在每次用户请求查询数据库以查找待处理的更改目前的信息.

因此,当请求最终在后端完成时 - 可能需要一分钟或一天 - Web应用程序至少需要使此缓存条目无效并执行另一个数据库查找.

现在我意识到这可以通过SqlDependency对象等来管理,但是我们假设它们不可用 - 也许它不是SQL Server后端,也可能是当前信息查询转到Web服务,无论如何.问题是,网络应用程序如何意识到状态的变化?

如果它可以在ASP.NET应用程序来处理NServiceBus的消息,什么是处理程序的情况下?换句话说,IoC容器将不得不注入一堆依赖项,但它们的范围是什么?这是否都在HTTP请求的上下文中执行?或者一切都需要为消息处理程序的静态/单例?

对这类问题有更好的/推荐的方法吗?

Ada*_*les 1

可以创建一个端点(NSB)来订阅已发布的事件并更新缓存。在实际更新完成之前不应发布该活动,这样您就不会失去同步。Web 应用程序将在下一个请求时继续从缓存中提取数据,或者您可以构建某种延迟。