Compartilhar via

使用 Azure CLI 创建一个 Service Bus 主题及其订阅

在本快速入门中,你将使用Azure CLI创建Service Bus主题,然后创建对该主题的订阅。

什么是“Service Bus”的主题和订阅?

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

显示主题和订阅的工作原理的示意图。

与Service Bus队列不同,其中每个消息由单个使用者处理,主题和订阅使用发布/订阅模式提供一对多通信形式。 可以为一个主题注册多个订阅。 当消息发送到主题时,每个订阅会分别对该消息进行处理。 主题订阅类似于接收发送至该主题的消息副本的虚拟队列。 可以选择为每个订阅单独注册主题的筛选规则,允许您筛选或限制哪些订阅会接收某个主题的哪些消息。

Service Bus 主题和订阅使你能够扩展规模,以处理分布在大量用户和应用程序上的大量消息。

先决条件

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

注意

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

创建 Service Bus 主题和订阅

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

  1. 运行以下命令以登录到由世纪互联运营的Azure。

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

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

    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    
    

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

后续步骤

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