【问题标题】:Azure Service bus unique subscription name when scalling缩放时 Azure 服务总线的唯一订阅名称
【发布时间】:2016-06-29 16:18:13
【问题描述】:

我有一个场景,我是 Azure 服务总线中的主题和订阅。该网站创建一个主题的订阅。创建网站的另一个实例时,我想为同一主题创建一个具有唯一名称的新订阅。什么是最好的方法。该网站在 azure 中托管为 webapp。

【问题讨论】:

  • 用例是什么?我不建议这样做,因为您的订阅需要在网站实例死亡时进行清理。
  • 感谢 Sean Feldman 和 JTaub,该场景是当在主题上发布消息时,Web 应用程序从订阅中读取消息并使用 signalR 将其推送到客户端。这就是我想为每个实例创建订阅的原因,因为每个实例都有自己的一组客户端。

标签: c# .net azure azureservicebus azure-web-app-service


【解决方案1】:

Azure 服务总线是一个代理,您的应用程序应该是一个竞争消费者(即同一队列的多个实例馈送,因为这些只是您横向扩展的同一 Web 应用程序的实例)。话虽如此,有时您需要实现像回调这样的机制,通常用于与 webapp 的特定实例进行通信,一直到客户端。为此,我建议不要考虑为每个 webapp 而不是每个实例创建订阅(这可以使用 WEBSITE_INSTANCE_ID 作为唯一订阅 ID 来完成)。就像 John 评论的那样,每个实例订阅的问题是,当您缩小时,与取消配置的 webapp 实例的订阅相关的消息将保留在代理上而未处理。更不用说不断向外/向内扩展会生成订阅,这些订阅将成为孤立的并且不会被清理。

另一种方法是为每个 webapp 订阅,并使用专门为此目的设计的 SignalR with a backplane 之类的东西将这些事件分发到特定实例。 SignalR 有多个背板实现(Redis、Azure ServiceBus、SQL Server)。

【讨论】:

  • 感谢 Sean Feldman 和 JTaub,该场景是在主题上发布消息时,Web 应用程序从订阅中读取消息并使用 signalR 将其推送到客户端。这就是我想为每个实例创建订阅的原因,因为每个实例都将拥有自己的一组客户端。但根据 Sean 的建议,我可以只订阅一个主题并使用 SignalR 背板来处理横向扩展场景。
  • 如果我遵循这条路线,消息应该可以从订阅中读取多次。因此多个实例可以读取消息并将其发送给客户端。那么如何设置它的计数以及何时将消息标记为完成?
  • 您只阅读一次消息并使用背板使用 signalR 进行广播。如果成功,将 ASB 消息标记为已完成。
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2021-09-23
  • 2019-03-21
相关资源
最近更新 更多