使用 Azure CLI 创建一个服务总线主题和该主题的订阅

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

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

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

TopicConcepts

与每条消息都由单个使用方处理的服务总线队列相比,主题和订阅通过发布/订阅模式提供一对多通信方式。 可向一个主题注册多个订阅。 当消息发送到主题时,每个订阅会分别对该消息进行处理。 主题订阅类似于接收发送至该主题的消息副本的虚拟队列。 可以选择基于每个订阅注册主题的筛选规则,这样就可以筛选或限制哪些主题订阅接收发送至某个主题的哪些消息。

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

先决条件

如果没有 Azure 订阅,可在开始前创建一个试用版订阅。 可以在计算机上安装并使用 Azure CLI。

注意

在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

创建“服务总线”主题和订阅

每个对主题的订阅都可以接收每条消息的副本。 主题在协议和语义方面与服务总线队列完全兼容。 服务总线主题支持一系列选择规则,这些规则具有筛选条件和用来设置或修改消息属性的可选操作。 规则每次匹配时,都会生成一条消息。 若要深入了解规则、筛选器和操作,请单击此链接

  1. 运行以下命令以登录到 Azure 中国。

    az cloud set -n AzureChinaCloud
    az login
    
  2. 运行以下命令来创建 Azure 资源组。 如有需要,请更新资源组名称和位置。

    az group create --name MyResourceGroup --location chinaeast
    
  3. 运行以下命令以创建服务总线消息命名空间。 更新命名空间的名称,使其成为唯一名称。

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

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

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

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

    az servicebus topic subscription create --resource-group MyResourceGroup --namespace-name $namespaceName --topic-name MyTopic --name S3    
    
  8. 通过使用自定义属性的筛选条件(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')"    
    
  9. 通过使用自定义属性的筛选条件 (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'"    
    
  10. 通过使用自定义属性的筛选条件(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')"     
    
  11. 运行以下命令,获取命名空间的主连接字符串。 使用此连接字符串连接到队列并发送和接收消息。

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

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

后续步骤

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