在 Azure 服务总线中批量删除消息(预览版)
Azure 服务总线是一个完全托管的企业集成消息中转站,使你能够在解耦的应用程序和服务之间发送和接收消息。 但是,你有时可能想要从队列或订阅中删除消息而不处理消息,例如,如果消息已过期、损坏或不相关。 本文介绍如何在 Azure 服务总线中批量删除消息。
批量删除消息的方案
在许多情况下,你可能想要使用 Azure 服务总线中的批量删除消息功能。 以下是其中一些原因:
- 过期的消息:删除超过其生存时间 (TTL) 值且位于死信队列中的消息。
- 验证或处理失败:删除验证或处理逻辑失败且位于死信队列中的消息。
- 不相关的消息:从活动队列中删除与应用程序逻辑不再相关的消息。
- 处理重复或不正确的内容:从活动队列中删除重复或不正确的消息。
通过使用批量删除消息功能,可以一次性从队列或订阅中删除多条消息,而不必逐条删除。 由于删除是在服务端完成的,因此不需要在删除消息之前接收消息。 该方法可最大程度地减少服务请求的数量和网络延迟。
重要
目前,分区实体不支持批量删除。 在一个批量删除调用中最多可以删除 4000 个消息。 批量删除是按尽力而为的原则执行的,不保证在单个 API 调用中删除切确的 messageCount。
如何在服务总线中批量删除消息
可以通过对服务总线接收器对象调用 DeleteMessagesAsync 来删除消息。 在服务器端,DeleteMessagesAsync 需要两个参数:messageCount 和 beforeEnqueueTime,如下所述:
messageCount
:要删除的消息数。 服务可能会删除少于此限制的消息。beforeEnqueueTime
:可选的 DateTimeOffset,以 UTC 表示,指删除操作的截止时间。 只会删除在此时间之前排入队列的消息。
此外,可以调用 PurgeMessagesAsync 来清除实体中的所有消息。
使用 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 日之后仍可使用,但它们将不再获得 Azure 的官方支持和更新。 有关详细信息,请参阅支持停用公告。