Azure Functions 的 Azure 服務匯流排繫結


下一步

Azure Functions 透過觸發程式和系結與Azure 服務匯流排整合。 與服務匯流排整合可讓您建立可回應和傳送佇列或主題訊息的函式。

動作 類型
建立服務匯流排佇列或主題訊息時執行函數 觸發程序
傳送 Azure 服務匯流排訊息 輸出系結

新增至您的函數應用程式

Functions 2.x 和更新版本

使用觸發程式和系結會要求您參考適當的封裝。 NuGet 套件適用于 .net 類別庫,而延伸模組套件組合適用于所有其他應用程式類型。

語言 加入者 .。。 備註
C# 安裝NuGet 套件4.x 版
C # 腳本、JAVA、JavaScript、Python、PowerShell 註冊延伸模組套件組合 建議搭配使用Azure Tools 擴充功能與 Visual Studio Code。
C # 腳本 (online-僅適用于 Azure 入口網站) 新增系結 若要更新現有的系結延伸模組,而不需要重新發佈函數應用程式,請參閱 更新您的延伸模組。

服務匯流排擴充功能5.x 和更新版本

現在已可使用新版本的服務匯流排系結延伸模組。 它引進了使用身分 識別(而非秘密)連接的能力。 如需使用受控識別來設定函式應用程式的教學課程,請參閱 使用以身分識別為基礎的連接建立函數應用程式教學課程。 針對 .NET 應用程式,新的延伸模組版本也會變更您可以系結的類型, Microsoft.ServiceBus.MessagingMicrosoft.Azure.ServiceBusMicrosoft.ServiceBus.Messaging中的較新類型取代類型。

您可以藉由安裝NuGet 套件5.x 版來取得此擴充功能版本,或在您的檔案中新增下列內容,以從擴充功能套件組合 v3 新增

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.3.0, 4.0.0)"
  }
}

注意

版本3.x 的延伸模組套件目前不包含儲存體系結的資料表。 如果您的應用程式需要資料表儲存體,您現在必須繼續使用2.x 版。

若要深入瞭解,請參閱 更新您的延伸模組。

Functions 1.x

函式1.x 應用程式會自動參考 NuGet 套件2.x 版的 node.js。

host.json 設定

本節說明2.x 版和更高版本中此系結的可用設定。 主機. json 檔案中的設定會套用至函式應用程式實例中的所有函數。 下列範例主機 json 檔案僅包含此系結的2.x 版 + 設定。 如需2.x 版和更新版本中函數應用程式設定的詳細資訊,請參閱 Azure Functions 的 host json 參考

注意

有關 Functions 1.x 中 host.json 的參考,請參閱適用於 Azure Functions 1.x 的 host.json 參考

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "prefetchCount": 100,
            "messageHandlerOptions": {
                "autoComplete": true,
                "maxConcurrentCalls": 32,
                "maxAutoRenewDuration": "00:05:00"
            },
            "sessionHandlerOptions": {
                "autoComplete": false,
                "messageWaitTimeout": "00:00:30",
                "maxAutoRenewDuration": "00:55:00",
                "maxConcurrentSessions": 16
            },
            "batchOptions": {
                "maxMessageCount": 1000,
                "operationTimeout": "00:01:00",
                "autoComplete": true
            }
        }
    }
}

如果您已 isSessionsEnabled 將設定為 truesessionHandlerOptions 則會接受。 如果您已 isSessionsEnabled 將設定為 falsemessageHandlerOptions 則會接受。

屬性 預設 描述
prefetchCount 0 取得或設定訊息接收者可以同時要求的訊息數目。
messageHandlerOptions.maxAutoRenewDuration 00:05:00 將自動更新訊息鎖定的最大持續時間。
messageHandlerOptions。自動完成 true 觸發程式是否應該在處理之後自動呼叫完成,或是函式程式碼會手動呼叫 complete。

false只有在 c # 中才支援將設定為。

如果設定為,則觸發程式會在函式 true 執行成功完成時自動完成訊息,否則會放棄訊息。

當設定為時 false ,您必須負責呼叫 false 方法來完成、放棄或 deadletter 訊息。 如果擲回例外狀況 (但未呼叫任何 MessageReceiver 方法) ,則會保留鎖定。 鎖定過期後,訊息會以遞增的方式重新排入佇列, DeliveryCount 而且會自動更新鎖定。

在非 C # 函式中,函式中的例外狀況會導致執行時間在背景中呼叫 abandonAsync 。 如果未發生任何例外狀況,則 completeAsync 會在背景中呼叫。
messageHandlerOptions. maxConcurrentCalls 16 對回呼的最大並行呼叫數目,訊息抽取應針對每個縮放的實例起始。 Functions 執行階段預設會並行處理多個訊息。
sessionHandlerOptions. 此時 maxconcurrentsessions 2000 每個縮放的實例可以同時處理的最大會話數目。
batchOptions.maxMessageCount 1000 觸發時傳送至函式的訊息數目上限。
batchOptions. operationTimeout 00:01:00 以表示的時間範圍值 hh:mm:ss
batchOptions。自動完成 true 請參閱上述的描述 messageHandlerOptions.autoComplete

第5版 + 的其他設定

下列範例主機 json 檔案僅包含服務匯流排擴充功能的5.0.0 和更高版本的設定。

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessages": 1000,
            "sessionIdleTimeout": "00:01:00",
            "enableCrossEntityTransactions": false
        }
    }
}

使用服務匯流排延伸模組1.x 版和更新版本時,除了中的2.x 設定之外,還支援下列全域設定 ServiceBusOptions

屬性 預設 描述
prefetchCount 0 取得或設定訊息接收者可以同時要求的訊息數目。
autoCompleteMessages true 決定是否要在成功執行函式之後自動完成訊息,而且應該使用這些訊息來取代 autoComplete configuration 設定。
maxAutoLockRenewalDuration 00:05:00 將自動更新訊息鎖定的最大持續時間。 這僅適用于接收訊息批次的函數。
maxConcurrentCalls 16 對回呼的最大並行呼叫數目,訊息抽取應針對每個縮放的實例起始。 Functions 執行階段預設會並行處理多個訊息。
maxConcurrentSessions 8 每個縮放的實例可以同時處理的最大會話數目。
maxMessages 1000 將傳遞給每個函式呼叫的訊息數目上限。 這僅適用于接收訊息批次的函數。
sessionIdleTimeout n/a 針對目前使用中的會話,等候接收訊息的最大時間量。 過了這段時間之後,處理器將會關閉會話,並嘗試處理另一個會話。
enableCrossEntityTransactions false 是否要在服務匯流排命名空間上啟用跨越多個實體的交易。

重試設定

除了使用 service bus 擴充功能5.x 版和更新版本的上述設定屬性之外,您也可以 RetryOptions 在中進行設定 ServiceBusOptions 。 這些設定會決定是否應該重試失敗的作業,如果是,則是重試嘗試之間的等待時間量。 選項也會控制接收訊息的時間,以及與服務匯流排服務的其他互動所允許的時間量。

屬性 預設 描述
mode 指數 用來計算重試延遲的方法。 預設的指數模式將會根據退避策略來重試嘗試,其中每次嘗試都會增加其等待的持續時間,然後再重試。 Fixed模式會以固定間隔重試嘗試,且每個延遲都有一致的持續時間。
tryTimeout 00:01:00 每次嘗試作業等候作業的最大持續時間。
delay 00:00:00.80 要在重試嘗試之間套用的延遲或退差因數。
maxDelay 00:01:00 允許重試嘗試之間的延遲上限
maxRetries 3 將相關聯的作業視為失敗之前的重試嘗試次數上限。