簡體   English   中英

有沒有辦法可以延遲Azure功能中對服務總線消息的重試?

[英]Is there a way I can delay the retry for a service bus message in an Azure function?

我有一個函數可以從訂閱中提取消息,並將其轉發到HTTP端點。 如果端點不可用,則會引發異常。 發生這種情況時,我想將該特定消息的下一次嘗試延遲一定的時間,例如15分鍾。 到目前為止,我已經找到以下解決方案:

  • 捕獲異常,睡覺,然后拋出。 這是一個糟糕的解決方案,因為我需要為處於睡眠狀態的CPU使用率付費,這會影響該函數的吞吐量。
  • 捕獲異常,克隆消息,設置ScheduledEnqueueTimeUtc屬性,然后將其添加回隊列。 這是一種更好的方法,但是它會重置傳遞計數,因此,只有一個訂閱者無法處理實際問題時,絕不會解決任何實際問題,並將其重新發送給所有訂閱。
  • 捕獲異常,然后將消息放置在存儲隊列中。 這意味着維護一個存儲隊列以匹配每個預訂,並具有兩個功能而不是一個功能。

我理想地希望發生的是捕獲異常,並在不釋放消息鎖定的情況下退出函數。 這樣,一旦鎖過期,該消息將再次重試。 但是,似乎在成功完成之后,該函數在消息上調用Complete() ,並在引發異常之后,在消息上調用Abandon() 是否可以繞過此延遲,或以其他方式實現延遲?

我將通過提供您提出的流程由LogicApp更好地處理純函數來解決您的情況。

在LogicApp中實現“ 等待/重試/出隊”下一模式非常容易,因為這種流控制正是LogicApp所設計的。

盡管仍處於預覽狀態(不建議用於生產代碼),但可以使用Durable Functions 如果您想保持在代碼中操作對象的能力,那可能是最好的選擇!

(也為LogicApp解決方案+1!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM