從 Azure Logic Apps 中的工作流程 連線 Azure 服務匯流排

適用於:Azure Logic Apps (使用量 + 標準)

本指南說明如何使用 服務匯流排 連接器,從 Azure Logic Apps 中的工作流程存取 Azure 服務匯流排。 接著,您可以建立自動化工作流程,以在服務總線中的事件觸發時執行,或執行動作來管理服務總線專案,例如:

  • 監視訊息何時送達(自動完成)或收到佇列、主題和主題訂用帳戶中的 [查看鎖定]。
  • 傳送訊息。
  • 建立和刪除主題訂閱。
  • 管理佇列和主題訂用帳戶中的訊息,例如取得、取得延遲、完成、延遲、放棄和寄不出的信件。
  • 更新佇列和主題訂用帳戶中訊息和會話的鎖定。
  • 關閉佇列和主題中的會話。

您可以使用可從 Azure 服務匯流排 取得回應的觸發程式,並將輸出提供給工作流程中的其他動作使用。 您也可以讓其他動作使用來自 服務匯流排 動作的輸出。

連接器技術參考

服務匯流排 連接器有不同的版本,以邏輯應用程式工作流程類型和主機環境為基礎

邏輯應用程式 Environment 連接器版本
耗用 多租使用者 Azure Logic Apps 受控連接器(標準類別)。 如需詳細資訊,請參閱下列文件:

- 服務匯流排 受控連接器參考
- Azure Logic Apps 的受控連接器
耗用 整合服務環境 (ISE) Managed 連接器 (Standard 類別) 和 ISE 版本,其訊息限制與標準類別不同。 如需詳細資訊,請參閱下列文件:

- 服務匯流排 受控連接器參考
- ISE 訊息限制
- Azure Logic Apps 中的受控連接器
標準 單一租用戶 Azure Logic Apps 和 App Service 環境 v3 (僅限 Windows 方案) 受控連接器(Azure 裝載)和內建連接器,這是 服務提供者型的。 內建版本通常提供更佳的效能、功能、定價等等。

注意:服務匯流排 內建連接器觸發程式遵循輪詢觸發程式模式,這表示觸發程式會持續檢查佇列或主題訂用帳戶中的訊息。

如需詳細資訊,請參閱下列文件:

- 服務匯流排 Managed 連接器參考
- 服務匯流排 內建連接器作業
- Azure Logic Apps 中的內建連接器

必要條件

  • Azure 帳戶和訂用帳戶。 如果您沒有 Azure 訂用帳戶,請先註冊免費的 Azure 帳戶

  • 服務匯流排 命名空間和傳訊實體,例如佇列。 如需詳細資訊,請參閱下列文件:

  • 您連線到 服務匯流排 命名空間和傳訊實體的邏輯應用程式工作流程。 若要使用 服務匯流排 觸發程序啟動工作流程,您必須從空白工作流程開始。 若要在工作流程中使用 服務匯流排 動作,請使用任何觸發程序啟動您的工作流程。

  • 如果您的邏輯應用程式資源使用受控識別來驗證對 服務匯流排 命名空間和傳訊實體的存取權,請確定您已在對應的層級指派角色許可權。 例如,若要存取佇列,受控識別需要具有該佇列所需許可權的角色。

    • 即使邏輯應用程式的工作流程存取不同的傳訊實體,每個邏輯應用程式資源都應該只使用一個受控識別。

    • 每個存取佇列或主題訂用帳戶的受控識別都應該使用自己的 服務匯流排 API 連線。

    • 服務匯流排 作業,以不同的傳訊實體交換訊息,而且需要不同的許可權,應該使用自己的 服務匯流排 API 連線。

    如需受控識別的詳細資訊,請參閱 使用 Azure Logic Apps 中的受控識別來驗證 Azure 資源的存取權。

  • 根據預設,服務匯流排 內建連接器作業是狀態的。 若要以具狀態模式執行這些作業,請參閱為無狀態內建連接器啟用具狀態模式

Azure 服務匯流排 作業的考慮

無限迴圈

重要

當您同時選取具有相同連接器類型的觸發程式和動作,並使用它們來處理相同的實體,例如傳訊佇列或主題訂用帳戶時,請小心。 這個組合可以建立無限迴圈,這會導致永遠不會結束的邏輯應用程式。

連接器快取中已儲存會話的限制

服務匯流排 傳訊實體,例如訂用帳戶或主題,服務匯流排 連接器一次最多可以節省 1,500 個唯一會話到連接器快取。 如果會話計數超過此限制,則會從快取中移除舊的會話。 如需詳細資訊,請參閱訊息工作階段

依序傳送相互關聯的訊息

當您需要依特定順序傳送相關訊息時,您可以使用 服務匯流排 連接器和循序車隊模式來建立工作流程。 相互關聯的訊息具有屬性,可定義這些訊息之間的關聯性,例如 Azure 服務匯流排 中的會話標識碼。

當您建立取用邏輯應用程式工作流程時,您可以使用服務總線會話範本來選取相互關聯的順序傳遞,以實作循序車隊模式。 如需詳細資訊,請參閱 依序傳送相關訊息。

大型訊息支援

當您使用 服務匯流排 內建連接器作業時,只有標準工作流程才能使用大型訊息支援。 例如,您可以分別使用內建觸發程式和動作來接收和大型訊息。

針對 服務匯流排 受控連接器,訊息大小上限限制為 1 MB,即使您使用進階層 服務匯流排 命名空間也是如此。

增加接收和傳送訊息的逾時

在使用 服務匯流排 內建作業的標準工作流程中,您可以增加接收和傳送訊息的逾時。 例如,若要增加接收訊息的逾時, 請在 Azure Functions 擴充功能中變更下列設定:

{
   "version": "2.0",
   "extensionBundle": {
      "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows",
      "version": "[1.*, 2.0.0)"
   },
   "extensions": {
      "serviceBus": {
         "batchOptions": {
            "operationTimeout": "00:15:00"
         }
      }  
   }
}

若要增加傳送訊息的逾時,請新增 ServiceProviders.ServiceBus.MessageSenderOperationTimeout 應用程式設定

服務匯流排 Managed 連接器觸發程式

  • 針對 服務匯流排 受控連接器,所有觸發程式都是長時間輪詢。 此觸發程式類型會處理所有訊息,然後等候 30 秒,讓更多訊息出現在佇列或主題訂用帳戶中。 如果在 30 秒內未出現任何訊息,就會略過觸發程序執行。 如果有,觸發程序會繼續讀取訊息,直到佇列或主題訂閱是空的。 下一個觸發程式輪詢是以觸發程式屬性中指定的周期間隔為基礎。

  • 某些觸發程式,例如 當一或多個訊息抵達佇列 (自動完成) 觸發程式時,可以傳回一或多個訊息。 當觸發程式引發時,它們會在觸發程式的 [最大訊息計數] 屬性所指定的訊息數目之間傳回。

    注意

    自動完成觸發程式會自動完成訊息,但完成只會在下一次呼叫 服務匯流排。 此行為可能會影響您的工作流程設計。 例如,避免在自動完成觸發程式上變更並行,因為如果您的工作流程進入節流狀態,這項變更可能會導致重複的訊息。 變更並行控制會建立下列條件:

    • 使用程式代碼略過 WorkflowRunInProgress 節流觸發程式。

    • 完成作業不會執行。

    • 下一個觸發程式執行會在輪詢間隔之後發生。

    您必須將服務總線鎖定持續時間設定為超過輪詢間隔的值。 不過,儘管此設定如此,如果您的工作流程在下一個輪詢間隔仍處於節流狀態,訊息仍可能無法完成。

    不過,如果您開啟 服務匯流排 觸發程式的並行設定,屬性的預設值maximumWaitingRuns為 10。 根據 服務匯流排 實體的鎖定持續時間設定和工作流程的執行持續時間,此預設值可能太大,而且可能會導致「鎖定遺失」例外狀況。 若要尋找您案例的最佳值,請從 屬性的值 1 或 2 maximumWaitingRuns 開始測試。 若要變更等候執行值上限,請檢閱 變更等候執行限制

服務匯流排 內建連接器觸發程式

目前,服務匯流排 內建觸發程式的組態設定會在 Azure Functions 主機延伸模組之間共用,此擴充功能定義於邏輯應用程式的 host.json 檔案中,以及邏輯應用程式工作流程中定義的觸發程式設定,您可以透過設計工具或程式代碼檢視進行設定。 本節涵蓋這兩個設定位置。

  • 在標準工作流程中,某些觸發程式,例如 佇列觸發程式中可用的 訊息時,可以傳回一或多個訊息。 當觸發程式引發時,它們會在一個和訊息數目之間傳回。 針對這種類型的觸發程式,以及不支援 [最大訊息計數] 參數的位置,您仍然可以控制使用 host.json 檔案中的 maxMessageBatchSize 屬性所接收的訊息數目。 若要尋找此檔案,請參閱 編輯標準邏輯應用程式的主機和應用程式設定。

    "extensions": {
      "serviceBus": {
          "maxMessageBatchSize": 25
      }
    }
    
  • 您也可以透過設計工具或程式碼,在 服務匯流排 觸發程式上啟用並行:

    "runtimeConfiguration": {
        "concurrency": {
            "runs": 100
        }
    }
    

    當您使用批次設定並行時,請保留並行執行數目大於整體批次大小。 如此一來,讀取訊息就不會進入等候狀態,而且在讀取訊息時一律會加以挑選。 在某些情況下,觸發程式最多可以有批次大小兩倍。

  • 如果您啟用並行存取, SplitOn 限制會縮減為 100 個專案。 此行為適用於所有觸發程式,而不只是 服務匯流排 觸發程式。 請確定您在啟用並行的任何觸發程式上,指定的批次大小小於此限制。

  • 在某些情況下,觸發程式可能會超過並行設定。 Azure Logic Apps 不會讓這些執行失敗,而是將等候狀態排入佇列,直到可以啟動為止。 maximumWaitingRuns 設定可控制等候狀態中允許的執行數目:

    "runtimeConfiguration": {
        "concurrency": {
            "runs": 100,
            "maximumWaitingRuns": 50
        }
    }
    

    使用 服務匯流排 觸發程式,請確定您仔細測試這些變更,讓執行不會等候超過訊息鎖定逾時的時間。 如需預設值的詳細資訊,請參閱 這裡的並行和取消批處理限制。

  • 如果您啟用並行存取,預設會存在批次讀取之間的 30 秒延遲。 此延遲會讓觸發程式變慢以達成下列目標:

    • 減少傳送來檢查要套用並行執行的記憶體呼叫數目。

    • 模擬 服務匯流排 Managed 連接器觸發程序的行為,在找不到訊息時,會進行 30 秒長的輪詢。

    您可以變更此延遲,但請確定您仔細測試對預設值所做的任何變更:

    "workflow": {
        "settings": {
            "Runtime.ServiceProviders.FunctionTriggers.DynamicListenerEnableDisableInterval": "00:00:30"
        }
    }
    
    

步驟 1:檢查 服務匯流排 命名空間的存取權

若要確認邏輯應用程式資源具有存取 服務匯流排 命名空間的許可權,請使用下列步驟:

  1. Azure 入口網站 中,開啟您的 服務匯流排 命名空間

  2. 在命名空間功能表上的 [設定] 下,選取 [共用存取原則]。 在 [宣告] 底下,檢查您是否具有該命名空間的管理許可權。

    顯示已選取 Azure 入口網站、服務匯流排 命名空間和 [共用存取原則] 的螢幕快照。

步驟 2:取得連線驗證需求

稍後,當您第一次新增 服務匯流排 觸發程式或動作時,系統會提示您輸入連線資訊,包括連線驗證類型。 根據您的邏輯應用程式工作流程類型、服務匯流排 連接器版本和選取的驗證類型,您將需要下列專案:

受控連接器驗證 (取用和標準工作流程)

驗證類型 必要資訊
存取金鑰 服務匯流排 命名空間的 連接字串。 如需詳細資訊,請檢閱取得 服務匯流排 命名空間的 連接字串
已與 Microsoft Entra 整合 服務匯流排 命名空間的端點 URL。 如需詳細資訊,請參閱取得 服務匯流排 命名空間的端點 URL。
Logic Apps 受控識別 服務匯流排 命名空間的端點 URL。 如需詳細資訊,請檢閱取得 服務匯流排 命名空間的端點 URL。

內建連接器驗證 (僅限標準工作流程)

驗證類型 必要資訊
連接字串 服務匯流排 命名空間的 連接字串。 如需詳細資訊,請檢閱取得 服務匯流排 命名空間的 連接字串
Active Directory OAuth - 服務匯流排 命名空間的完整名稱,例如 <your-Service-Bus-namespace.servicebus.windows.net。> 如需詳細資訊,請檢閱取得 服務匯流排 命名空間的完整名稱。 如需其他屬性值,請檢閱 Microsoft Entra ID Open Authentication
受控識別 服務匯流排 命名空間的完整名稱,例如 <your-Service-Bus-namespace.servicebus.windows.net。> 如需詳細資訊,請檢閱取得 服務匯流排 命名空間的完整名稱。

取得 服務匯流排 命名空間的 連接字串

若要在新增 服務匯流排 觸發程式或動作時建立連線,您必須具有 服務匯流排 命名空間的 連接字串。 連接字串 開頭為 sb:// 前置詞。

  1. Azure 入口網站 中,開啟您的 服務匯流排 命名空間

  2. 在命名空間功能表上的 [設定] 下,選取 [共用存取原則]。

  3. 在 [ 共用存取原則] 窗格中,選取 [RootManageSharedAccessKey]。

  4. 在主要或次要 連接字串 旁邊,選取 [複製] 按鈕。

    顯示 服務匯流排 命名空間 連接字串 和已選取 [複製] 按鈕的螢幕快照。

    注意

    若要檢查字串是否適用於命名空間,而非特定傳訊實體,請搜尋參數 連接字串EntityPath。 如果您發現此參數,則 連接字串 適用於特定實體,且不是與工作流程搭配使用的正確字串。

  5. 儲存 連接字串 以供稍後使用。

取得 服務匯流排 命名空間的端點 URL

如果您使用 服務匯流排 受控連接器,如果您選取 Microsoft Entra 整合式Logic Apps 受控識別驗證類型,則需要此端點 URL。 端點 URL 開頭為 sb:// 前置詞。

  1. Azure 入口網站 中,開啟您的 服務匯流排 命名空間

  2. 在命名空間功能表上,選取 [設定] 底下的 [屬性]。

  3. [屬性] 底下,服務匯流排 端點,複製端點 URL,並在您必須提供服務總線端點 URL 時儲存以供稍後使用。

取得 服務匯流排 命名空間的完整名稱

  1. Azure 入口網站 中,開啟您的 服務匯流排 命名空間

  2. 在命名空間功能表上,選取 [概觀]。

  3. 在 [觀] 窗格中,尋找 [主機名] 屬性,並複製完整名稱,看起來像< your-Service-Bus-namespace.servicebus.windows.net。>

步驟 3:選項 1 - 新增 服務匯流排 觸發程式

下列步驟會使用 Azure 入口網站進行,但若搭配適當的 Azure Logic Apps 延伸模組,則也可以使用下列工具來建立邏輯應用程式工作流程:

  1. Azure 入口網站 中,使用設計工具中的空白工作流程開啟您的取用邏輯應用程式資源。

  2. 在設計工具中,遵循下列一般步驟來新增您想要的 Azure 服務匯流排 觸發程式。

    此範例會繼續進行名為 「在佇列中收到訊息時」的觸發程式(自動完成)。

  3. 如果出現提示,請為您的連線提供下列資訊。 完成時,選取建立

    屬性 必要 描述
    連線名稱 Yes 線上名稱
    驗證類型 Yes 用來存取 服務匯流排 命名空間的驗證類型。 如需詳細資訊,請參閱 受控連接器驗證
    連接字串 Yes 您稍早複製並儲存的 連接字串。

    例如,此聯機會使用存取密鑰驗證,並提供 服務匯流排 命名空間的 連接字串:

    顯示取用工作流程、服務匯流排 觸發程式和範例連線資訊的螢幕快照。

  4. 觸發程式資訊方塊出現之後,請提供必要的資訊,例如:

    屬性 必要 描述
    佇列名稱 Yes 要存取的選取佇列
    佇列類型 No 所選佇列的類型
    您要檢查項目的頻率為何? Yes 檢查專案佇列的輪詢間隔和頻率

    顯示取用工作流程、服務匯流排 觸發程式和範例觸發程式資訊的螢幕快照。

  5. 若要將任何其他可用的屬性新增至觸發程式,請開啟 [ 新增參數 ] 列表,然後選取您想要的屬性。

  6. 新增工作流程所需的任何動作。

    例如,您可以新增動作,以在新訊息送達時傳送電子郵件。 當您的觸發程式檢查佇列並尋找新訊息時,您的工作流程會針對找到的訊息執行您選取的動作。

  7. 完成後,請儲存您的工作流程。 在設計師工具列上選取儲存

步驟 3:選項 2 - 新增 服務匯流排 動作

下列步驟會使用 Azure 入口網站進行,但若搭配適當的 Azure Logic Apps 延伸模組,則也可以使用下列工具來建立邏輯應用程式工作流程:

  1. Azure 入口網站中,在設計工具中開啟您的使用量邏輯應用程式和工作流程。

  2. 在設計工具中,遵循下列一般步驟來新增您想要的 Azure 服務匯流排 動作。

    此範例會繼續進行傳送 訊息 動作。

  3. 如果出現提示,請為您的連線提供下列資訊。 完成時,選取建立

    屬性 必要 描述
    連線名稱 Yes 線上名稱
    驗證類型 Yes 用來存取 服務匯流排 命名空間的驗證類型。 如需詳細資訊,請參閱 受控連接器驗證
    連接字串 Yes 您稍早複製並儲存的 連接字串。

    例如,此聯機會使用存取密鑰驗證,並提供 服務匯流排 命名空間的 連接字串:

    顯示取用工作流程、服務匯流排 動作和範例連線資訊的螢幕快照。

  4. 出現動作資訊方塊之後,請提供必要的資訊,例如:

    屬性 必要 描述
    佇列/主題名稱 Yes 傳送訊息的選取佇列或主題目的地
    會話標識碼 No 將訊息傳送至會話感知佇列或主題時,會話標識符
    系統屬性 No - None
    - 執行詳細數據:在訊息中新增有關執行做為自定義屬性的元數據屬性資訊。

    顯示取用工作流程、服務匯流排 動作和範例動作信息的螢幕快照。

  5. 若要將任何其他可用的屬性新增至動作,請開啟 [ 新增參數 ] 列表,然後選取您想要的屬性。

  6. 新增工作流程所需的任何其他動作。

    例如,您可以新增傳送電子郵件的動作,以確認您的郵件已傳送。

  7. 完成後,請儲存您的工作流程。 在設計師工具列上選取儲存

服務匯流排 內建連接器應用程式設定

在標準邏輯應用程式資源中,服務匯流排 內建連接器包含可控制各種閾值的應用程式設定,例如傳送訊息的逾時,以及訊息集區中每個處理器核心的訊息傳送者數目。 如需詳細資訊,請檢閱 應用程式設定的參考 - local.settings.json

使用 服務匯流排 內建觸發程式從寄不出的信件佇列讀取訊息

在標準工作流程中,若要從佇列或主題訂用帳戶中的寄不出的信件佇列讀取訊息,請使用指定的觸發程式遵循下列步驟:

  1. 在您的空白工作流程中,根據您的案例,新增名為 「當佇列中提供訊息時」或主題訂用帳戶中提供訊息時 (peek-lock) 的 服務匯流排 內連接器觸發程式。

  2. 在觸發程式中,設定下列參數值來指定佇列或主題訂用帳戶的預設寄不出的信件佇列,您可以像任何其他佇列一樣存取:

    • 當佇列觸發程式中有訊息可用時:將佇列名稱參數設定為 queuename/$deadletterqueue

    • 當主題訂用帳戶 (peek-lock) 觸發程式中有訊息可用時:將 [主題名稱 ] 參數設定為 topicname/Subscriptions/subscriptionname/$deadletterqueue

    如需詳細資訊,請參閱 服務匯流排 寄不出的信件佇列概觀

疑難排解

工作流程更新延遲生效

如果 服務匯流排 觸發程式的輪詢間隔很小,例如 10 秒,工作流程的更新可能不會生效長達 10 分鐘。 若要解決此問題,您可以停用邏輯應用程式資源、進行變更,然後再次啟用邏輯應用程式資源。

沒有可用的工作階段

有時候,完成訊息或更新會話等作業會產生下列錯誤:

{
  "status": 400,
  "message": "No session available to complete the message with the lock token 'ce440818-f26f-4a04-aca8-555555555555'. clientRequestId: facae905-9ba4-44f4-a42a-888888888888",
  "error": {
    "message": "No session available to complete the message with the lock token 'ce440818-f26f-4a04-aca8-555555555555'."
  }
}

服務匯流排 連接器會使用記憶體內部快取來支援與會話相關聯的所有作業。 服務匯流排 訊息接收者會在接收訊息的角色實例 (虛擬機) 記憶體中快取。 若要處理所有要求,連線的所有呼叫都會路由傳送至這個相同的角色實例。 此行為是必要的,因為會話中的所有 服務匯流排 作業都需要接收特定會話訊息的相同接收者。

要求可能會因為基礎結構更新、連接器部署等原因而無法路由傳送至相同的角色實例。 如果發生此事件,要求會失敗,因為在會話中執行作業的接收者無法在提供要求的角色實例中使用。

只要偶爾發生此錯誤,就會預期錯誤。 發生錯誤時,訊息仍會保留在服務總線中。 下一個觸發程式或工作流程執行會嘗試再次處理訊息。

下一步