你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure 服务总线中批量删除消息(预览版)
Azure 服务总线是一个完全托管的企业集成消息中转站,使你能够在解耦的应用程序和服务之间发送和接收消息。 但是,你有时可能想要从队列或订阅中删除消息而不处理消息,例如,如果消息已过期、损坏或不相关。 本文介绍如何在 Azure 服务总线中批量删除消息。
批量删除消息的方案
在许多情况下,你可能想要使用 Azure 服务总线中的批量删除消息功能。 以下是其中一些原因:
- 过期的消息:删除超过其生存时间 (TTL) 值且位于死信队列中的消息。
- 验证或处理失败:删除验证或处理逻辑失败且位于死信队列中的消息。
- 不相关的消息:从活动队列中删除与应用程序逻辑不再相关的消息。
- 处理重复或不正确的内容:从活动队列中删除重复或不正确的消息。
通过使用批量删除消息功能,可以一次性从队列或订阅中删除多条消息,而不必逐条删除。 由于删除是在服务端完成的,因此不需要在删除消息之前接收消息。 该方法可最大程度地减少服务请求的数量和网络延迟。
重要
目前,分区实体不支持批量删除。 在一个批量删除调用中最多可以删除 4000 个消息。 批量删除是尽力而为的,并不保证在单个 API 调用中删除准确数量 (messageCount) 的消息。
如何在服务总线中批量删除消息
可以通过对服务总线接收器对象调用 DeleteMessagesAsync 来删除消息。 在服务器端,DeleteMessagesAsync
需要两个参数:messageCount
和 beforeEnqueueTime
。
messageCount
:要删除的消息数。 服务可能会删除少于此限制的消息。beforeEnqueueTime
:可选的 DateTimeOffset,以 UTC 表示,指删除操作的截止时间。 只会删除在此时间之前排入队列的消息。
此外,可以调用 PurgeMessagesAsync 来清除实体中的所有消息。
使用 Azure 门户
还可以使用 Azure 门户上的服务总线资源管理器从实体中清除消息。 可以按照以下步骤清除消息:
- 导航到要从中删除消息的实体上的“服务总线资源管理器”边栏选项卡。
- 在服务总线资源管理器下拉菜单中选择“接收模式”。
- 单击“清除消息”选项,如屏幕截图中所示。
- 此时将显示另一个对话框,请输入“清除”以执行清除消息操作。
使用 Azure SDK 执行这些操作时,beforeEnqueueTime 参数默认为当前 UTC 时间 (DateTime.UtcNow())。 请务必提供正确的值以防止意外删除消息。
注意
清除操作可能导致 CPU 使用率增加,因为它涉及到多个 API 调用。 在清除期间,锁定的消息无法删除,而会保留在实体中。
后续步骤
若要了解 Azure 服务总线功能,请尝试学习采用所选语言的示例:
- 适用于 .NET(最新)的 Azure 服务总线客户端库示例
- 适用于 Java(最新)的 Azure 服务总线客户端库示例
- 适用于 Python 的 Azure 服务总线客户端库示例
- 适用于 JavaScript 的 Azure 服务总线客户端库示例
- 适用于 TypeScript 的 Azure 服务总线客户端库示例
旧版 .NET 和 Java 客户端库示例如下:
- 适用于.NET(旧版)的 Azure 服务总线客户端库示例(见预提取示例)。
- 适用于 Java(旧版)的 Azure 服务总线客户端库示例(见预提取示例)。
2026 年 9 月 30 日,我们将停用 Azure 服务总线 SDK 库 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus,这些库不符合 Azure SDK 准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 请在该日期之前迁移到最新的 Azure SDK 库,新库提供了关键安全更新和改进功能。
尽管 2026 年 9 月 30 日之后仍然可以使用较旧的库,但它们将不再获得 Microsoft 的官方支持和更新。 有关详细信息,请参阅支持停用公告。