调用时 Azure 服务总线唯一订阅名称
Azure Service bus unique subscription name when scalling
我有一个场景,我是 Azure 服务总线中的主题和订阅。该网站创建对主题的订阅。当创建网站的另一个实例时,我想为同一主题创建一个具有唯一名称的新订阅。什么是最好的方法。该网站在 Azure 中作为 Web 应用程序托管。
Azure 服务总线是一个代理,您的应用程序应该是一个竞争消费者(即,同一队列的多个实例馈送,因为它们只是您横向扩展的同一 Web 应用程序的实例)。话虽如此,有时您需要实现回调之类的机制,通常用于与 Web 应用程序的特定实例进行通信,一直到客户端。为此,我建议不要考虑为每个 webapp 而不是每个实例创建订阅(这可以使用 WEBSITE_INSTANCE_ID 作为唯一订阅 ID 来完成)。就像 John 评论的那样,按实例订阅的问题在于,当您缩小时,与取消配置的 webapp 实例订阅相关的消息将保留在未处理的代理上。更不用说常量 scale-out/in 将生成孤立且未清理的订阅。
替代方法是为每个 webapp 订阅并使用 SignalR with a backplane 之类的东西将这些事件分发到特定实例,这是专门为此目的而设计的。 SignalR 有几个背板实现(Redis、Azure ServiceBus、SQL 服务器)。
我有一个场景,我是 Azure 服务总线中的主题和订阅。该网站创建对主题的订阅。当创建网站的另一个实例时,我想为同一主题创建一个具有唯一名称的新订阅。什么是最好的方法。该网站在 Azure 中作为 Web 应用程序托管。
Azure 服务总线是一个代理,您的应用程序应该是一个竞争消费者(即,同一队列的多个实例馈送,因为它们只是您横向扩展的同一 Web 应用程序的实例)。话虽如此,有时您需要实现回调之类的机制,通常用于与 Web 应用程序的特定实例进行通信,一直到客户端。为此,我建议不要考虑为每个 webapp 而不是每个实例创建订阅(这可以使用 WEBSITE_INSTANCE_ID 作为唯一订阅 ID 来完成)。就像 John 评论的那样,按实例订阅的问题在于,当您缩小时,与取消配置的 webapp 实例订阅相关的消息将保留在未处理的代理上。更不用说常量 scale-out/in 将生成孤立且未清理的订阅。
替代方法是为每个 webapp 订阅并使用 SignalR with a backplane 之类的东西将这些事件分发到特定实例,这是专门为此目的而设计的。 SignalR 有几个背板实现(Redis、Azure ServiceBus、SQL 服务器)。