在 Azure 服务总线中批量删除消息(预览版)

Azure 服务总线是一个完全托管的企业集成消息中转站,使你能够在解耦的应用程序和服务之间发送和接收消息。 但是,你有时可能想要从队列或订阅中删除消息而不处理消息,例如,如果消息已过期、损坏或不相关。 本文介绍如何在 Azure 服务总线中批量删除消息。

批量删除消息的方案

在许多情况下,你可能想要使用 Azure 服务总线中的批量删除消息功能。 以下是其中一些原因:

  • 过期的消息:删除超过其生存时间 (TTL) 值且位于死信队列中的消息。
  • 验证或处理失败:删除验证或处理逻辑失败且位于死信队列中的消息。
  • 不相关的消息:从活动队列中删除与应用程序逻辑不再相关的消息。
  • 处理重复或不正确的内容:从活动队列中删除重复或不正确的消息。

通过使用批量删除消息功能,可以一次性从队列或订阅中删除多条消息,而不必逐条删除。 由于删除是在服务端完成的,因此不需要在删除消息之前接收消息。 该方法可最大程度地减少服务请求的数量和网络延迟。

重要

目前,分区实体不支持批量删除。 在一个批量删除调用中最多可以删除 4000 个消息。 批量删除是按尽力而为的原则执行的,不保证在单个 API 调用中删除切确的 messageCount。

如何在服务总线中批量删除消息

可以通过对服务总线接收器对象调用 DeleteMessagesAsync 来删除消息。 在服务器端,DeleteMessagesAsync 需要两个参数:messageCount 和 beforeEnqueueTime,如下所述:

  • messageCount:要删除的消息数。 服务可能会删除少于此限制的消息。
  • beforeEnqueueTime:可选的 DateTimeOffset,以 UTC 表示,指删除操作的截止时间。 只会删除在此时间之前排入队列的消息。

此外,可以调用 PurgeMessagesAsync 来清除实体中的所有消息。

使用 Azure 门户

还可以使用 Azure 门户上的服务总线资源管理器从实体中清除消息。 可以按照以下步骤清除消息:

  1. 导航到要从中删除消息的实体上的“服务总线资源管理器”边栏选项卡。
  2. 在服务总线资源管理器下拉菜单中选择“接收模式”。

下拉列表的屏幕截图,其中选择了“接收模式”。

  1. 单击“清除消息”选项,如屏幕截图中所示。

已选择“清除消息”的屏幕截图。

  1. 此时将显示另一个对话框,请输入“清除”以执行清除消息操作。

输入“清除”以确认的屏幕截图。

使用 Azure SDK 执行这些操作时,beforeEnqueueTime 参数默认为当前 UTC 时间 (DateTime.UtcNow())。 请务必提供正确的值以防意外删除消息。

注意

清除操作可能导致 CPU 使用率增加,因为它涉及到多个 API 调用。 在清除期间,锁定的消息无法删除,而会保留在实体中。

后续步骤

若要了解 Azure 服务总线功能,请尝试学习采用所选语言的示例: