使用 PowerShell 管理服务总线资源

Azure PowerShell 是一个脚本编写环境,可用于控制和自动执行 Azure 服务的部署和管理。 本文介绍如何通过本地 Azure PowerShell 控制台或脚本,使用服务总线 Resource Manager PowerShell 模块来预配和管理服务总线实体(命名空间、队列、主题和订阅)。

还可以使用 Azure Resource Manager 模板管理服务总线实体。 有关详细信息,请参阅使用 Azure Resource Manager 模板创建服务总线资源一文。

先决条件

在开始之前,需要符合以下先决条件:

  • Azure 订阅。
  • 配备 Azure PowerShell 的计算机。 有关说明,请参阅 Azure PowerShell cmdlet 入门
  • 大致了解 PowerShell 脚本、NuGet 包和 .NET Framework。

入门

第一步是使用 PowerShell 登录 Azure 帐户和 Azure 订阅。 按照 Azure PowerShell cmdlet 入门中的说明登录 Azure 帐户,检索并访问 Azure 订阅中的资源。

设置 Service Bus 命名空间

使用服务总线命名空间时,可以使用 Get-AzureRmServiceBusNamespaceNew-AzureRmServiceBusNamespaceRemove-AzureRmServiceBusNamespaceSet-AzureRmServiceBusNamespace cmdlet。

本示例在脚本中创建几个本地变量:$Namespace$Location

  • $Namespace 是要使用的服务总线命名空间的名称。
  • $Location 标识我们要在其中预配命名空间的数据中心。
  • $CurrentNamespace 存储我们检索(或创建)的引用命名空间。

在实际脚本中,$Namespace$Location 可作为参数传递。

此部分脚本执行以下任务:

  1. 尝试使用指定名称检索服务总线命名空间。
  2. 如果找到该命名空间,则报告它找到的内容。
  3. 如果找不到该命名空间,则会创建该命名空间,并检索新创建的命名空间。

    # Query to see if the namespace currently exists
    $CurrentNamespace = Get-AzureRMServiceBusNamespace -ResourceGroup $ResGrpName -NamespaceName $Namespace
    
    # Check if the namespace already exists or needs to be created
    if ($CurrentNamespace)
    {
        Write-Host "The namespace $Namespace already exists in the $Location region:"
        # Report what was found
        Get-AzureRMServiceBusNamespace -ResourceGroup $ResGrpName -NamespaceName $Namespace
    }
    else
    {
        Write-Host "The $Namespace namespace does not exist."
        Write-Host "Creating the $Namespace namespace in the $Location region..."
        New-AzureRmServiceBusNamespace -ResourceGroup $ResGrpName -NamespaceName $Namespace -Location $Location
        $CurrentNamespace = Get-AzureRMServiceBusNamespace -ResourceGroup $ResGrpName -NamespaceName $Namespace
        Write-Host "The $Namespace namespace in Resource Group $ResGrpName in the $Location region has been successfully created."
    
    }
    

创建命名空间授权规则

下面的示例演示如何使用 New-AzureRmServiceBusNamespaceAuthorizationRuleGet-AzureRmServiceBusNamespaceAuthorizationRuleSet-AzureRmServiceBusNamespaceAuthorizationRuleRemove-AzureRmServiceBusNamespaceAuthorizationRule cmdlet 管理命名空间授权规则。

# Query to see if rule exists
$CurrentRule = Get-AzureRmServiceBusNamespaceAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthorizationRuleName $AuthRule

# Check if the rule already exists or needs to be created
if ($CurrentRule)
{
    Write-Host "The $AuthRule rule already exists for the namespace $Namespace."
}
else
{
    Write-Host "The $AuthRule rule does not exist."
    Write-Host "Creating the $AuthRule rule for the $Namespace namespace..."
    New-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthorizationRuleName $AuthRule -Rights @("Listen","Send")
    $CurrentRule = Get-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthorizationRuleName $AuthRule
    Write-Host "The $AuthRule rule for the $Namespace namespace has been successfully created."

    Write-Host "Setting rights on the namespace"
    $authRuleObj = Get-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthorizationRuleName $AuthRule

    Write-Host "Remove Send rights"
    $authRuleObj.Rights.Remove("Send")
    Set-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthRuleObj $authRuleObj

    Write-Host "Add Send and Manage rights to the namespace"
    $authRuleObj.Rights.Add("Send")
    Set-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthRuleObj $authRuleObj
    $authRuleObj.Rights.Add("Manage")
    Set-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -AuthRuleObj $authRuleObj

    Write-Host "Show value of primary key"
    $CurrentKey = Get-AzureRmServiceBusKey -ResourceGroup $ResGrpName -NamespaceName $Namespace -Name $AuthRule

    Write-Host "Remove this authorization rule"
    Remove-AzureRmServiceBusAuthorizationRule -ResourceGroup $ResGrpName -NamespaceName $Namespace -Name $AuthRule
}

创建队列

若要创建队列或主题,请使用上一部分中的脚本执行命名空间检查。 然后,创建队列:

# Check if queue already exists
$CurrentQ = Get-AzureRmServiceBusQueue -ResourceGroup $ResGrpName -NamespaceName $Namespace -QueueName $QueueName

if($CurrentQ)
{
    Write-Host "The queue $QueueName already exists in the $Location region:"
}
else
{
    Write-Host "The $QueueName queue does not exist."
    Write-Host "Creating the $QueueName queue in the $Location region..."
    New-AzureRmServiceBusQueue -ResourceGroup $ResGrpName -NamespaceName $Namespace -QueueName $QueueName -EnablePartitioning $True
    $CurrentQ = Get-AzureRmServiceBusQueue -ResourceGroup $ResGrpName -NamespaceName $Namespace -QueueName $QueueName
    Write-Host "The $QueueName queue in Resource Group $ResGrpName in the $Location region has been successfully created."
}

修改队列属性

执行上一部分中的脚本后,可以使用 Set-AzureRmServiceBusQueue cmdlet 更新队列的属性,如以下示例所示:

$CurrentQ.DeadLetteringOnMessageExpiration = $True
$CurrentQ.MaxDeliveryCount = 7
$CurrentQ.MaxSizeInMegabytes = 2048
$CurrentQ.EnableExpress = $True

Set-AzureRmServiceBusQueue -ResourceGroup $ResGrpName -NamespaceName $Namespace -QueueName $QueueName -QueueObj $CurrentQ

设置其他 Service Bus 实体

可以使用服务总线 PowerShell 模块预配其他实体,例如主题和订阅。 这些 cmdlet 在语法上与上一部分所示的队列创建 cmdlet 类似。

后续步骤

这些博客文章介绍管理服务总线实体的一些备选方法: