Azure 服务总线 pub/sub 到多个 Azure Web 应用程序实例

Azure Service Bus pub/sub to multiple azure web app instances

我正在尝试使用 Azure 服务总线实现 pub/sub。 我从本教程开始,到目前为止它一直有效: https://azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/

但在我的专用案例中,我不确定我应该如何做:

我在 Azure Web 应用程序上有一个 Web api 运行,可扩展到三个实例。 我有一个控制台应用程序客户端,它触发一些消息到一个专门的主题。

我想要实现的是,网络的所有三个实例 api 都获得发送到消息总线的消息。 所以这是一个火忘记行动:

我对订阅者 inactive/offline 时发送的旧消息不感兴趣。我只是在这些实例上同步内存缓存,所以当我需要知道我必须使哪些密钥失效时,这确实是一个短暂的信息。但重要的是每个订阅者都能获得信息以避免数据过时。

我不确定我是否必须在 Web 的启动代码中动态创建订阅 api 以便每个实例都有自己的订阅,或者我是否可以为所有 Web 应用程序实例订阅相同的订阅订阅? 我不想动态创建订阅,因为我不知道何时再次删除它们(例如缩小到 2 个实例而不是三个)。 但我无法找到任何文档如何执行此操作以及是否可以让多个客户端订阅相同的订阅或者我是否需要为每个客户端创建一个订阅。

I am not exactly sure if i have to create a subscription dynamically in the startup code of the web api so that every instance has its own subscription or if i can subscribe all web app instances to the same subscription?

服务总线订阅者默认采用 Competing Consumer 模式。您必须为每个 Web API 实例创建唯一的订阅,以便每个实例都能接收消息的副本。当 Web API 实例启动时,这样做最容易。

I would like not to dynamically create subscriptions since i don't know when to remove them again (e.g. scaled down to 2 instances instead of three).

您可以将订阅配置为在闲置一段时间后自动删除。 "Idle" 在这种情况下意味着 Web API 实例已经停转并且不再尝试接收订阅消息。创建订阅时,将 AutoDeleteOnIdle 时间跨度设置为较短的持续时间,目前至少为 5 分钟。现在您可以在 Web API 实例启动时创建新订阅,并且知道它会在 Web API 实例停止后很快自动删除。

I am not interested in older messages that were sent when the subscriber was inactive/offline.

创建 topic 时,将 DefaultMessageTimeToLive 设置为较短的持续时间,例如5秒。这将确保新订阅者看不到旧消息。