暂停(禁用)和重新激活消息实体
可以暂停队列、主题和订阅。 暂停后,实体处于禁用状态,其中所有消息都保留在存储中。 不过,无法删除或添加消息,相应的协议操作也会导致错误出现。
出于紧急管理原因,你可能希望暂停实体。 例如,有故障的接收程序将消息从队列中移出、无法处理消息,还会错误地完成消息并将其删除。 在这种情况下,建议禁用接收队列,直到更正和部署代码为止。
暂停或重新激活可以由用户或系统执行。 系统只会出于重大管理原因(如达到订阅支出限制),才会暂停实体。 系统禁用的实体不能被用户重新激活,但在暂停原因消除后就会还原。
队列状态
可以为队列设置如下状态:
- Active:队列处于活动状态。 可以向队列发送消息或从队列接收消息。
- Disabled:队列处于暂停状态。 它相当于同时设置 SendDisabled 和 ReceiveDisabled 。
- SendDisabled:不能将消息发送到队列,但可以从队列接收消息。 如果尝试将消息发送到队列,则会出现异常。
- ReceiveDisabled:可以将消息发送到队列,但不能从队列接收消息。 如果尝试接收来自队列的消息,则会出现异常。
在 Azure 门户中更改队列状态:
在 Azure 门户中,导航到你的服务总线命名空间。
选择要更改其状态的队列。 可在底部的中间窗格中看到队列。
在“服务总线队列”页面上,将看到队列的当前状态显示为超链接。 如果未在左侧菜单中选择“概述”,请选择该选项以查看队列的状态。 选择队列的当前状态进行更改。
为队列选择新状态,然后选择“确定”。
也可以禁用发送和接收操作,方法是通过 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 门户中更改主题状态。 选择主题的当前状态以查看下一页,这将允许更改状态。
可以为主题设置如下状态:
- 活动:主题处于活动状态。 可以将消息发送到主题。
- Disabled:主题已暂停。 不能将消息发送到主题。 设置“禁用”等效于为主题设置“SendDisabled”。
- SendDisabled:状态与“禁用”效果相同。 不能将消息发送到主题。 如果尝试将消息发送到主题,则会出现异常。
订阅状态
可以在 Azure 门户中更改订阅状态。 选择订阅的当前状态以查看下一页,这将允许更改状态。
可以为订阅设置如下状态:
- 活动:订阅处于活动状态。 可以从订阅接收消息。
- Disabled:订阅已暂停。 不能从订阅接收消息。 对订阅设置“禁用”等效于设置“ReceiveDisabled”。 如果尝试接收来自订阅的消息,则会出现异常。
- ReceiveDisabled:状态与“禁用”效果相同。 不能从订阅接收消息。 如果尝试接收来自订阅的消息,则会出现异常。
以下是基于在主题及其订阅上设置的状态的行为方式。
主题状态 | 订阅状态 | 行为 |
---|---|---|
可用 | 可用 | 可以将消息发送到主题,并从订阅接收消息。 |
可用 | “禁用”或“接收已禁用” | 可以将消息发送到主题,但不能从订阅接收消息 |
“禁用”或“发送已禁用” | 可用 | 不能将消息发送到主题,但可以接收已在订阅中的消息。 |
“禁用”或“发送已禁用” | “禁用”或“接收已禁用” | 无法将消息发送到主题,也无法从订阅接收消息。 |
其他状态
EntityStatus 枚举还定义了一组只能由系统设置的过渡状态。
后续步骤
若要了解有关服务总线消息传送的详细信息,请参阅以下主题: