共用方式為


批次刪除 Azure 服務匯流排中的訊息 (預覽)

Azure 服務匯流排是完全受控的企業整合訊息代理程式,它可讓您在分離的應用程式與服務之間傳送和接收訊息。 然而,有時您可能想要刪除佇列或訂用帳戶中的訊息而不進行處理,例如當訊息已過期、損毀或無關時。 本文會向您說明如何在 Azure 服務匯流排中批次刪除訊息。

批次刪除訊息的案例

在某些情況下,您可能會想要在 Azure 服務匯流排中使用批次刪除訊息功能。 以下是其中一些原因:

  • 過期的訊息:刪除超過其存留時間 (TTL) 值且位於無效信件佇列中的訊息。
  • 驗證或處理失敗:移除驗證或處理邏輯失敗且位於無效信件佇列中的訊息。
  • 不相關的訊息:從作用中的佇列中刪除與應用程式邏輯不再相關的訊息。
  • 處理重複或錯誤的內容:從作用中的佇列中移除重複或錯誤的訊息。

透過使用批次刪除訊息功能,您可以在一個作業中刪除佇列或訂用帳戶中的多個訊息,而不必逐一刪除它們。 由於刪除是在服務端完成的,因此您無需在刪除訊息之前接收它們。 此方法可同時將服務要求數與網路延遲降到最低。

重要事項

目前,不支援對分區實體進行批次刪除。 您可以在批次刪除呼叫中刪除最多 4000 則訊息。 批次刪除是以盡力而為的方式進行,無法保證在單一 API 呼叫中會刪除確切的 messageCount 。

如何在服務匯流排中批次刪除訊息

您可以透過在 Service Bus Receiver 物件上呼叫 DeleteMessagesAsync 來刪除訊息。 在伺服器端,DeleteMessagesAsync 需要兩個參數:messageCountbeforeEnqueueTime

  • messageCount:想要刪除的訊息數。 該服務可能會刪除比此限制數少的訊息。
  • beforeEnqueueTime:選用的 DateTimeOffset 參數 (以 UTC 表示),代表刪除的截止時間。 只會刪除此時間之前已在佇列中的訊息。

此外,您也可以呼叫 PurgeMessagesAsync 來清除實體中的所有訊息。

使用 Azure 入口網站

您也可以使用 Azure 入口網站上可用的 [服務匯流排總管] 來清除實體中的訊息。 您可以遵循下列步驟來清除訊息:

  1. 在您要從其中刪除訊息的實體上,瀏覽至 [服務匯流排總管] 刀鋒視窗。
  2. 在 [服務匯流排總管] 下拉式清單中選擇 [接收模式]。

已選取 [接收模式] 的下拉式清單的螢幕擷取畫面。

  1. 如快照所示,按一下 [清除訊息] 選項。

已選取 [清除訊息] 的螢幕擷取畫面。

  1. 隨即會出現另一個對話方塊,輸入「purge」以執行清除訊息作業。

輸入 Purge 以確認的螢幕擷取畫面。

使用 Azure SDK 來執行這些作業時,beforeEnqueueTime 參數預設為目前的 UTC 時間 (DateTime.UtcNow())。 請務必確定您提供正確的值,以避免意外刪除訊息。

附註

清除作業可能會導致 CPU 使用率增加,因為它涉及多次 API 呼叫。 在清除期間,已鎖定的訊息無法刪除,將會保留在實體中。

Quotas

為了確保跨層級的可預測效能,Azure 服務匯流排會針對單一批次刪除要求中可刪除的訊息數目上限提供層級型限制:

每個請求的批次大小上限
標準 500 則訊息
進階 4,000 則訊息

這些限制適用於透過 SDK、REST API 和服務匯流排總管起始的所有批次刪除作業。

後續步驟

若要探索 Azure 服務匯流排功能,請嘗試使用您選擇的語言範例: