簡體   English   中英

Azure 邏輯應用程序 - 服務總線觸發器僅在輪詢重復時觸發

[英]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運行,請參閱觸發器概述

每個工作流都包含一個觸發器,它定義了實例化和啟動工作流的調用。 以下是一般觸發器類別:

  • 輪詢觸發器,定期檢查服務的端點
  • 推送觸發器,它創建對端點的訂閱並提供回調 URL 以便端點可以在指定事件發生或數據可用時通知觸發器。 然后觸發器在觸發之前等待端點的響應。

另一個問題是並發設置實際上只讓 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.

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