[英]Azure Logic App - Service Bus Trigger only firing on polling recurrence
我有一個 Azure 服務總線命名空間,包含 8 個主題,每個主題至少有一個訂閱。
通常有兩個邏輯應用,第一個每半小時(在 15 點和 45 點)從我們的數據庫中提取數據並將其放置到選擇的服務總線主題上,第二個使用“收到消息時觸發”在主題訂閱中(自動完成)”觸發連接器 - 具有默認並發設置 (25)。 一個例子如下所示
"When_a_message_is_received_in_a_topic_subscription_(auto-complete)": {
"conditions": [],
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['servicebus']['connectionId']"
}
},
"method": "get",
"path": "/@{encodeURIComponent(encodeURIComponent('exampletopic'))}/subscriptions/@{encodeURIComponent('examplesubscription')}/messages/head",
"queries": {
"subscriptionType": "Main"
}
},
"recurrence": {
"frequency": "Minute",
"interval": 30,
"startTime": "2021-01-27T00:00:00.000Z",
"timeZone": "UTC"
},
"runtimeConfiguration": {
"concurrency": {
"runs": 25
}
},
"type": "ApiConnection"
}
如標題中所述,我遇到的問題是觸發器僅在 30 分鍾輪詢重復時觸發,如下所示,而不是在消息 go 進入服務總線時觸發(與我們也使用的常見數據服務觸發器不同在創建/更新/刪除時立即觸發)。 這是設計使然還是我設置錯誤?
另一個問題是並發設置實際上只讓 25 通過,並將 rest 保留在服務總線中直到下一次運行,因此我們不得不在處理之間等待很長時間。 我認為並發設置的重點是讓邏輯應用程序運行在隊列中等待,然后當一個完成時另一個可以啟動。 正如您在我上面粘貼的圖片中看到的那樣,這並沒有發生。 3.45 運行從數據庫中提取了 43 條記錄。 只有 25 個在 4.00 觸發,還有 17 個留在服務總線上,直到下一次在 4.30 運行。 如果我們發送大量數據,這有可能成為一個巨大的瓶頸。
服務總線設置也在下面,如果任何人都感興趣的話:
Topic:
"properties": {
"defaultMessageTimeToLive": "P5D",
"maxSizeInMegabytes": 1024,
"requiresDuplicateDetection": true,
"duplicateDetectionHistoryTimeWindow": "PT1H",
"enableBatchedOperations": true,
"status": "Active",
"supportOrdering": true,
"autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
"enablePartitioning": false,
"enableExpress": false
}
Subscription:
"properties": {
"lockDuration": "PT5M",
"requiresSession": false,
"defaultMessageTimeToLive": "P5D",
"deadLetteringOnMessageExpiration": true,
"deadLetteringOnFilterEvaluationExceptions": true,
"maxDeliveryCount": 1,
"status": "Active",
"enableBatchedOperations": true,
"autoDeleteOnIdle": "P5D"
}
提前致謝
這是設計使然還是我設置錯誤?
Service Bus
觸發器是這樣設計的,因為它是一個polling trigger
,並且會按照您指定的interval
運行,請參閱觸發器概述:
每個工作流都包含一個觸發器,它定義了實例化和啟動工作流的調用。 以下是一般觸發器類別:
另一個問題是並發設置實際上只讓 25 通過,並將 rest 保留在服務總線中直到下一次運行,因此我們不得不在處理之間等待很長時間。
您是否嘗試過關閉Concurrency Control
。 根據描述,關閉Concurrency Control
可以運行盡可能多的並行實例,但是Concurrency Control
的設置一旦打開,就無法關閉。 您可能需要重新創建Azure logic app
,或將Concurrency Control
設置為可能的最大值,最大值為 50。
1.
2.
正如弗蘭克所說,邏輯應用程序適用於輪詢機制,一種選擇是您可以減少輪詢間隔時間。 但是每次輪詢都算作一次操作,因此邏輯應用程序的成本將上升 go。 所以請記住這一點。 您可以增加並發性以從服務總線中獲取更多數量的消息。
您要考慮的另一個選擇是將 Azure 函數與服務總線觸發器一起使用。 這將是一個直接的觸發因素,但是是的涉及編碼而不是配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.