使用 Azure Functions 和 Azure 服務匯流排來呼叫或觸發邏輯應用程式

當您需要部署長時間執行的接聽程式或工作時,可以使用 Azure Functions 來觸發邏輯應用程式。 例如,您可以建立一個函式,以在 Azure 服務匯流排 佇列上接聽,並立即將邏輯應用程式引發為推送觸發程式。

必要條件

建立邏輯應用程式

在此案例中,您有一個函式正在執行您想要觸發的每個邏輯應用程式。 首先,建立以 HTTP 要求觸發程式開頭的邏輯應用程式。 每當收到佇列訊息時,函數即會呼叫該端點。

  1. 登入 Azure 入口網站,然後建立空白的邏輯應用程式。

    如果您還不熟悉邏輯應用程式,請檢閱快速入門:如何建立第一個邏輯應用程式

  2. 在搜尋方塊中,輸入 http request。 從觸發程式清單中,選取 [ 收到 HTTP 要求時 ] 觸發程式。

    選取觸發程序

    使用要求觸發程式時,您可以選擇性地輸入要搭配佇列訊息使用的 JSON 架構。 JSON 架構可協助邏輯應用程式設計工具瞭解輸入資料的結構,並讓您更輕鬆地在工作流程中使用輸出。

  3. 若要指定結構描述,請在 [要求本文 JSON 結構描述] 方塊中輸入結構描述,例如:

    指定 JSON 結構描述

    如果您沒有結構描述,但是有 JSON 格式的範例承載,即可從該承載產生 JSON 結構描述。

    1. 在要求觸發程序中,選取 [使用範例承載來產生結構描述]。

    2. 在 [ 輸入或貼上範例 JSON 承載] 下,輸入您的範例承載,然後選取 [ 完成]。

      輸入範例承載

    此範例承載會產生出現在觸發程序中的這個結構描述:

    {
       "type": "object",
       "properties": {
          "address": {
             "type": "object",
             "properties": {
                "number": {
                   "type": "integer"
                },
                "street": {
                   "type": "string"
                },
                "city": {
                   "type": "string"
                },
                "postalCode": {
                   "type": "integer"
                },
                "country": {
                   "type": "string"
                }
             }
          }
       }
    }
    
  4. 新增您想要在收到佇列訊息之後執行的任何其他動作。

    例如,您可以使用 Office 365 Outlook 連接器傳送電子郵件。

  5. 儲存邏輯應用程式,進而為此邏輯應用程式中的觸發程序產生回呼 URL。 稍後,您會在程式碼中針對 Azure 服務匯流排佇列觸發程式使用此回呼 URL。

    回呼 URL 會出現在 HTTP POST url 屬性中。

    為觸發程序產生的回呼 URL

建立函式

接著,建立一個函式,作為觸發程序並接聽佇列。

  1. 在 Azure 入口網站中,開啟並展開函式應用程式 (如果尚未開啟)。

  2. 在函式應用程式名稱之下,展開 [Functions]。 在 [ 函數 ] 窗格中,選取 [ 新增函數]。

    展開 [函數],然後選取 [新增函式]

  3. 根據您是否已建立新的函式應用程式,並在其中選取 .NET 作為執行時間堆疊,或您使用現有的函數應用程式,來選取此範本。

    • 針對新的函數應用程式,請選取此範本:服務匯流排佇列觸發 程式

      選取新函數應用程式的範本

    • 針對現有的函數應用程式,請選取此範本: 服務匯流排佇列觸發程式-c #

      選取現有函數應用程式的範本

  4. 在 [ Azure 服務匯流排佇列觸發 程式] 窗格中,為您的觸發程式提供名稱,並設定佇列的 服務匯流排連接 (使用 Azure 服務匯流排 SDK 接聽程式 OnMessageReceive() ),然後選取 [ 建立]。

  5. 撰寫基本函式,以使用佇列訊息做為觸發程式來呼叫先前建立的邏輯應用程式端點。 撰寫您的函式之前,請先參閱下列考慮:

    這個範例會使用非同步模式的 Task.Run 方法。 如需詳細資訊,請參閱 使用 async 和 await 進行非同步程式設計

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    
    // Can also fetch from App Settings or environment variable
    private static string logicAppUri = @"https://prod-05.westus.logic.azure.com:443/workflows/<remaining-callback-URL>";
    
    // Reuse the instance of HTTP clients if possible: https://docs.microsoft.com/azure/azure-functions/manage-connections
    private static HttpClient httpClient = new HttpClient();
    
    public static async Task Run(string myQueueItem, TraceWriter log) 
    {
       log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
       var response = await httpClient.PostAsync(logicAppUri, new StringContent(myQueueItem, Encoding.UTF8, "application/json")); 
    }
    
  6. 若要測試此函式,請使用 Service Bus Explorer 等工具來新增佇列訊息。

    在函式收到訊息之後,邏輯應用程式會立即觸發。

下一步