你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure CLI 创建服务总线主题和主题订阅

在本快速入门中,你将使用 Azure CLI 创建服务总线主题,然后创建该主题的订阅。

什么是服务总线主题和订阅?

服务总线主题和订阅支持 发布/订阅 消息通信模型。 使用主题和订阅时,分布式应用程序的组件不会直接相互通信;而是通过充当中介的主题交换消息。

TopicConcepts

与服务总线队列不同的是,队列中的每个消息仅由一个使用者处理,而主题和订阅则通过发布/订阅模式提供了一对多的通信形式。 可以为一个主题注册多个订阅。 当消息发送到主题时,每个订阅会分别对该消息进行处理。 对某个主题的订阅类似于一个虚拟队列,该队列接收发送到主题的消息副本。 可以选择为每个订阅注册主题的筛选规则,这样可以根据每个订阅来筛选或限制哪些消息被该主题的特定订阅接收。

利用服务总线主题和订阅,可以进行扩展以处理跨大量用户和应用程序的许多消息。

先决条件

如果没有 Azure 订阅,可以在开始前创建 一个免费帐户

在本快速入门中,你将使用可在登录到 Azure 门户后启动的 Azure Cloud Shell。 有关 Azure Cloud Shell 的详细信息,请参阅 Azure Cloud Shell 概述。 还可以在计算机上 安装和 使用 Azure PowerShell。

创建 Service Bus 主题和订阅

主题的每个订阅都可以接收每条消息的副本。 主题在协议和语义上与服务总线队列完全兼容。 服务总线主题(Topic)支持多样的选择规则,其中包含筛选条件,以及可用来设置或修改消息属性的可选操作。 每当规则匹配时,它都会生成一条消息。 若要详细了解规则、筛选器和操作,请遵循此 链接

  1. 登录到 Azure 门户

  2. 通过选择下图所示的图标启动 Azure Cloud Shell。 如果 Cloud Shell 处于 PowerShell 模式,请切换到 Bash 模式。

  3. 运行以下命令以创建 Azure 资源组。 根据需要更新资源组名称和位置。

    az group create --name MyResourceGroup --location eastus
    
  4. 运行以下命令以创建服务总线消息传送命名空间。 将命名空间的名称更新为唯一。

    namespaceName=MyNameSpace$RANDOM
    az servicebus namespace create --resource-group MyResourceGroup --name $namespaceName --location eastus
    
  5. 运行以下命令,在命名空间中创建主题。

    az servicebus topic create --resource-group MyResourceGroup   --namespace-name $namespaceName --name MyTopic
    
  6. 创建第一个主题订阅

    az servicebus topic subscription create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S1    
    
  7. 创建主题的第二个订阅

    az servicebus topic subscription create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S2    
    
  8. 创建主题的第三个订阅

    az servicebus topic subscription create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S3    
    
  9. 通过使用自定义属性的筛选条件(StoreIdStore1Store2Store3 之一)对第一个订阅创建筛选器。

    az servicebus topic subscription rule create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --subscription-name S1 --name MyFilter --filter-sql-expression "StoreId IN ('Store1','Store2','Store3')"    
    
  10. 通过使用自定义属性的筛选条件 (StoreId = Store4) 对第二个订阅创建筛选器

    az servicebus topic subscription rule create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name myTopic --subscription-name S2 --name MySecondFilter --filter-sql-expression "StoreId = 'Store4'"    
    
  11. 通过使用自定义属性的筛选条件(StoreId 不是 Store1Store2Store3Store4)对第三个订阅创建筛选器。

    az servicebus topic subscription rule create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --subscription-name S3 --name MyThirdFilter --filter-sql-expression "StoreId NOT IN ('Store1','Store2','Store3', 'Store4')"     
    
  12. 运行以下命令以获取命名空间的主连接字符串。 使用此连接字符串连接到队列并发送和接收消息。

    az servicebus namespace authorization-rule keys list --resource-group MyResourceGroup --namespace-name $namespaceName --name RootManageSharedAccessKey --query primaryConnectionString --output tsv    
    

    记下连接字符串和主题名称。 可以使用它们发送和接收消息。

后续步骤

若要了解如何将消息发送到主题并通过订阅接收这些消息,请参阅以下文章:在 TOC 中选择编程语言。