我正在尝试使用azure服务总线实现pub / sub。 我从这个教程开始,它到目前为止工作: https://azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/
但在我的专案中,我并不完全确定我应该如何做到这一点:
我在azure web app上运行了一个web api,它被缩放到三个实例。 我有一个控制台应用程序客户端,可以触发一些专用主题的消息。
我想要实现的是,web api的所有三个实例都会获得发送到消息总线的消息。 所以这是一场火灾忘记行动:
我对订阅者处于非活动状态/脱机状态时发送的旧邮件不感兴趣。我只是在这些实例上同步内存缓存,所以当我需要知道哪些密钥无效时,它实际上是一个简短的生活信息。但重要的是每个订户都要获取信息以避免陈旧数据。
我不确定是否必须在web api的启动代码中动态创建订阅,以便每个实例都有自己的订阅,或者我是否可以将所有Web应用程序实例订阅到同一订阅? 我不想动态创建订阅,因为我不知道何时再次删除它们(例如缩小到2个实例而不是3个实例)。 但我无法找到任何文档如何做到这一点,如果它是多个客户订阅相同的订阅或我需要为每个客户创建订阅。
答案 0 :(得分:7)
我不确定是否必须在web api的启动代码中动态创建订阅,以便每个实例都有自己的订阅,或者我是否可以将所有Web应用程序实例订阅到同一订阅?
默认情况下,Service Bus订户采用Competing Consumer模式。您必须为每个Web API实例创建唯一订阅,以便每个实例都接收消息的副本。在Web API实例启动时,最简单的方法就是这样做。
我不想动态创建订阅,因为我不知道何时再次删除它们(例如缩小到2个实例而不是3个)。
您可以将订阅配置为在空闲一段时间后自动删除。 "空闲"在这种情况下,意味着Web API实例已停止运行,并且不再尝试接收订阅上的消息。创建订阅时,将AutoDeleteOnIdle时间跨度设置为短暂的持续时间,目前至少为5分钟。现在,您可以在Web API实例启动时创建新订阅,并知道它将在Web API实例停止后立即自动删除。
我对订阅者处于非活动状态/离线状态时发送的旧邮件不感兴趣。
创建topic时,将DefaultMessageTimeToLive设置为短暂的持续时间,例如5秒。这将确保新订阅者不会看到旧邮件。