0

我们正在设计一个基于 Web 的系统,但也使用 NServiceBus 和 Azure Service Bus 进行通信。我们有一个为应用程序运行 IIS 的本地服务器,还有几个运行 Web 角色的云服务,用于与外部方通信(这些方调用云中的 RESTful 接口并将消息放在总线上,反之亦然)。

云解决方案和本地服务器都需要订阅和发布消息。发布似乎不是问题,但是如果 IIS 关闭进程,这些订阅会发生什么情况,当消息到达时它们是否会再次被唤醒,或者服务总线是否真的基于拉取订阅,因此需要一个活动的侦听器。

我在这里看到了有关托管发布者的问题,但没有看到有关订阅者安全的问题。

额外信息:我们很偶然地注意到,有时在我们的开发环境中,应用程序需要在消息开始到达之前启动几次。但是我突然想到,如果在应用程序启动时队列中实际上已经有消息,那么它们将被处理,否则不会。因此,重新启动只是意味着它会看到较旧的消息并对其进行处理,然后一旦运行它就可以正常运行。然而,另一位同事指出,nsb 相关的启动日志文件只有在他第一次访问托管在同一 Web 应用程序中的网站后才会生成。我刚刚遇到了类似的问题,消息在队列中,但处理程序上的断点没有被命中。当我在同一个 iis 应用程序实例上点击 webapi 方法时,突然正在处理消息。

4

1 回答 1

0

我根据我的经验而不是对 NServiceBus 或 Azure 服务总线的任何深入了解来回答我自己的问题。

似乎依赖服务总线侦听器在 IIS 或 Web 角色下处于活动状态是不安全的。两者都可以关闭进程,并且由于总线侦听器依赖于轮询服务而不是消息从服务推送到侦听器,因此在进程再次启动之前不会收到更多消息。

好消息是,当关联的网站或 Web 服务被点击时,该过程将重新启动。因此,如果您绝对知道您将在站点上获得比在公共汽车上更多的流量,那么您可能会冒着风险,即公共汽车侦听器将保持活动状态。然而,对于我们的项目,我们正在将侦听器拆分为单独的 Windows 服务。

于 2016-02-08T09:31:53.897 回答