我们正在设计一个基于 Web 的系统,但也使用 NServiceBus 和 Azure Service Bus 进行通信。我们有一个为应用程序运行 IIS 的本地服务器,还有几个运行 Web 角色的云服务,用于与外部方通信(这些方调用云中的 RESTful 接口并将消息放在总线上,反之亦然)。
云解决方案和本地服务器都需要订阅和发布消息。发布似乎不是问题,但是如果 IIS 关闭进程,这些订阅会发生什么情况,当消息到达时它们是否会再次被唤醒,或者服务总线是否真的基于拉取订阅,因此需要一个活动的侦听器。
我在这里看到了有关托管发布者的问题,但没有看到有关订阅者安全的问题。
额外信息:我们很偶然地注意到,有时在我们的开发环境中,应用程序需要在消息开始到达之前启动几次。但是我突然想到,如果在应用程序启动时队列中实际上已经有消息,那么它们将被处理,否则不会。因此,重新启动只是意味着它会看到较旧的消息并对其进行处理,然后一旦运行它就可以正常运行。然而,另一位同事指出,nsb 相关的启动日志文件只有在他第一次访问托管在同一 Web 应用程序中的网站后才会生成。我刚刚遇到了类似的问题,消息在队列中,但处理程序上的断点没有被命中。当我在同一个 iis 应用程序实例上点击 webapi 方法时,突然正在处理消息。