簡體   English   中英

Azure 服務總線 Azure 函數觸發並獲取所有消息

[英]Azure service bus Azure Function trigger and get all messages

我有一個隊列,其中放置了大量高頻數據。我有一個 azure 函數,該函數將在向其中寫入新消息並將消息寫入 Azure sql 數據庫時觸發。 我的問題是有太多的消息要寫,所以我想做的是“積累”消息,然后一次將它們全部寫入數據庫。 我在 Azure 函數服務總線集成中沒有看到任何類型的功能來獲取所有(或 x)消息並處理它們。

這樣的事情可能嗎?

任何幫助表示贊賞。

到目前為止,我解決這個問題的方法是避免服務總線觸發器,因為它涉及該函數對每個消息執行一個實例。 我每 10 秒執行一次時間觸發器,並使用來自訂閱客戶端的方法接收。

實際上,在這種情況下,您需要手動引入 Azure 服務總線庫,創建所需的類並調用 Receive 方法,您可以通過該方法判斷所需的項目數量。 請遵循 ASB 類(TopicClient 和 SubscriptionClient)應設置為單例的最佳實踐,因為它們是昂貴的對象。

我還必須積累消息來對它們進行排序和重復數據刪除,所以這就是我解決它的方法。 但是,從 Azure Functions 擴展中獲得這種開箱即用的功能會非常酷。

我只是想知道你為什么需要批量插入。 對於觸發您的函數的每條消息,Azure 都會創建一個新的函數實例; 所以性能在這里不會成為問題。 如果您仍然想要進行批處理,您可以將傳入的消息臨時存儲在代理 Azure 數據庫/數據存儲中,並在指定的時間段內查詢該代理並運行您的批量插入命令。 請記住,您必須在批量插入成功后刪除查詢記錄。

Azure Functions 運行時分批檢索和處理隊列消息。 默認batchSize為16,最大batchSize為32..這可以通過在Function App的host.json文件中提及batchSize來配置“隊列”觸發器。 請參閱有關 host.json 的更多信息

“隊列”觸發器的配置設置

"queues": {
  "maxPollingInterval": 2000,
  "visibilityTimeout" : "00:00:10",
  "batchSize": 16,
  "maxDequeueCount": 5,
  "newBatchThreshold": 8
}

暫無
暫無

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

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