暂停(禁用)和重新激活消息实体

可以暂停队列、主题和订阅。 暂停后,实体处于禁用状态,其中所有消息都保留在存储中。 不过,无法删除或添加消息,相应的协议操作也会导致错误出现。

出于紧急管理原因,你可能希望暂停实体。 例如,有故障的接收程序将消息从队列中移出、无法处理消息,还会错误地完成消息并将其删除。 在这种情况下,建议禁用接收队列,直到更正和部署代码为止。

暂停或重新激活可以由用户或系统执行。 系统只会出于重大管理原因(如达到订阅支出限制),才会暂停实体。 系统禁用的实体不能被用户重新激活,但在暂停原因消除后就会还原。

队列状态

可以为队列设置如下状态:

  • Active:队列处于活动状态。 可以向队列发送消息或从队列接收消息。
  • Disabled:队列处于暂停状态。 它相当于同时设置 SendDisabled 和 ReceiveDisabled 。
  • SendDisabled:不能将消息发送到队列,但可以从队列接收消息。 如果尝试将消息发送到队列,则会出现异常。
  • ReceiveDisabled:可以将消息发送到队列,但不能从队列接收消息。 如果尝试接收来自队列的消息,则会出现异常。

在 Azure 门户中更改队列状态:

  1. 在 Azure 门户中,导航到你的服务总线命名空间。

  2. 选择要更改其状态的队列。 可在底部的中间窗格中看到队列。

  3. 在“服务总线队列”页面上,将看到队列的当前状态显示为超链接。 如果未在左侧菜单中选择“概述”,请选择该选项以查看队列的状态。 选择队列的当前状态进行更改。

    Select state of the queue

  4. 为队列选择新状态,然后选择“确定”。

    Set state of the queue

也可以禁用发送和接收操作,方法是通过 Azure CLI 或 Azure PowerShell 使用 Azure 资源管理器模板。

使用 Azure PowerShell 更改队列状态

下面的示例展示了用于禁用队列的 PowerShell 命令。 重新激活命令等同于以下示例,只需将 Status 设置为“Active”即可。

$q = Get-AzServiceBusQueue -ResourceGroup mygrp -NamespaceName myns -QueueName myqueue

$q.Status = "Disabled"

Set-AzServiceBusQueue -ResourceGroup mygrp -NamespaceName myns -QueueName myqueue -QueueObj $q

主题状态

可以在 Azure 门户中更改主题状态。 选择主题的当前状态以查看下一页,这将允许更改状态。

Change topic status

可以为主题设置如下状态:

  • 活动:主题处于活动状态。 可以将消息发送到主题。
  • Disabled:主题已暂停。 不能将消息发送到主题。 设置“禁用”等效于为主题设置“SendDisabled”。
  • SendDisabled:状态与“禁用”效果相同。 不能将消息发送到主题。 如果尝试将消息发送到主题,则会出现异常。

订阅状态

可以在 Azure 门户中更改订阅状态。 选择订阅的当前状态以查看下一页,这将允许更改状态。

Change subscription status

可以为订阅设置如下状态:

  • 活动:订阅处于活动状态。 可以从订阅接收消息。
  • Disabled:订阅已暂停。 不能从订阅接收消息。 对订阅设置“禁用”等效于设置“ReceiveDisabled”。 如果尝试接收来自订阅的消息,则会出现异常。
  • ReceiveDisabled:状态与“禁用”效果相同。 不能从订阅接收消息。 如果尝试接收来自订阅的消息,则会出现异常。

以下是基于在主题及其订阅上设置的状态的行为方式。

主题状态 订阅状态 行为
可用 可用 可以将消息发送到主题,并从订阅接收消息。
可用 “禁用”或“接收已禁用” 可以将消息发送到主题,但不能从订阅接收消息
“禁用”或“发送已禁用” 可用 不能将消息发送到主题,但可以接收已在订阅中的消息。
“禁用”或“发送已禁用” “禁用”或“接收已禁用” 无法将消息发送到主题,也无法从订阅接收消息。

其他状态

EntityStatus 枚举还定义了一组只能由系统设置的过渡状态。

后续步骤

若要了解有关服务总线消息传送的详细信息,请参阅以下主题: