通过使用 Azure Functions 调用逻辑应用工作流来设置长时间运行的任务

适用于:Azure 逻辑应用(消耗)

当你需要部署长时间运行的侦听器或任务时,可以创建一个使用请求触发器的逻辑应用工作流,然后使用 Azure Functions 来调用该触发器并运行该工作流。

例如,可以创建一个函数来侦听进入 Azure 服务总线队列的消息。 发生此事件时,该函数会调用请求触发器,后者充当推送触发器来自动运行工作流。

本操作指南介绍如何创建一个通过请求触发器启动的逻辑应用工作流。 然后,你将创建一个侦听服务总线队列的函数。 当消息进入队列时,该函数将调用请求触发器创建的终结点来运行工作流。

注意

尽管你可以使用消耗或标准逻辑应用工作流来实现此行为,但此示例继续使用消耗工作流。

先决条件

创建逻辑应用工作流

  1. Azure 门户中,通过选择“空白逻辑应用”模板创建消耗空白逻辑应用。

  2. 设计器打开后,在设计器搜索框下选择“内置”。 在搜索框中输入“请求”。

  3. 从触发器列表中选择名为“当收到 HTTP 请求时”的触发器。

    Screenshot of the designer in the portal. The search box contains 'http request.' Under 'Triggers,' 'When a HTTP request is received' is highlighted.

    使用请求触发器时,可以选择输入用于队列消息的 JSON 架构。 JSON 架构可帮助设计器理解输入数据的结构,并方便你在工作流中使用输出。

  4. 若要指定架构,请在“请求正文 JSON 架构”框中输入架构。

    Screenshot of the details of an HTTP request trigger. Some JSON code is visible in the 'Request Body JSON Schema' box.

    如果你没有架构,但有一个 JSON 格式的示例有效负载,则可以基于该有效负载生成一个架构。

    1. 在请求触发器中,选择“使用示例有效负载生成架构”。

    2. 在“输入或粘贴示例 JSON 有效负载”下,输入你的示例有效负载,然后选择“完成”。

      Screenshot of the details of an HTTP request trigger. Under 'Enter or paste a sample JSON payload,' some payload data is visible.

      前面描绘的示例有效负载生成以下架构,该架构将显示在触发器中:

      {
         "type": "object",
         "properties": {
            "address": {
               "type": "object",
               "properties": {
                  "number": {
                     "type": "integer"
                  },
                  "street": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  },
                  "postalCode": {
                     "type": "integer"
                  },
                  "country": {
                     "type": "string"
                  }
               }
            }
         }
      }
      
  5. 在触发器下,添加要用于处理收到的消息的任何其他操作。

    例如,可以添加一个使用 Office 365 Outlook 连接器发送电子邮件的操作。

  6. 保存逻辑应用工作流。

    此步骤为工作流中的请求触发器生成回调 URL。 随后,在用于 Azure 服务总线队列触发器的代码中使用此回调 URL。 此回调 URL 显示在 HTTP POST URL 属性中。

    Screenshot of the details of an HTTP request trigger. Next to 'HTTP POST URL,' a URL is visible.

创建函数

接下来创建一个函数,用于侦听队列并在消息抵达时在请求触发器上调用终结点。

  1. Azure 门户中,打开函数应用。

  2. 在函数应用导航菜单中选择“函数”。 在“函数”窗格中选择“创建”。

    Screenshot of a function app with 'Functions' highlighted on the function app menu. The 'Functions' page is opened, and 'Create' is highlighted.

  3. 在“选择模板”下,选择名为“Azure 服务总线队列触发器”的模板。 在“模板详细信息”部分出现后(其中会根据所选的模板显示不同的选项),请提供以下信息:

    属性 价值 说明
    新建函数 <function-name> 输入函数的名称。
    服务总线连接 <Service-Bus-connection> 选择“新建”,为服务总线队列设置使用服务总线 SDK OnMessageReceive() 侦听器的连接。
    队列名称 <queue-name> 输入队列的名称。

    Screenshot of the 'Create function' pane with 'Azure Service Bus Queue trigger' highlighted, and template example details entered.

  4. 完成操作后,选择“创建”。

    Azure 门户现在会显示新 Azure 服务总线队列触发器函数的“概述”页。

  5. 现在,编写一个基本函数来调用前面创建的逻辑应用工作流的终结点。 在编写该函数之前,请查看以下注意事项:

    以下示例以异步模式使用 Task.Run 方法。 有关详细信息,请参阅使用 async 和 await 进行异步编程。 该示例还使用 application/json 消息内容类型,但你可以根据需要更改此类型。

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    
    // Set up the URI for the logic app workflow. You can also get this value on the logic app's 'Overview' pane, under the trigger history, or from an environment variable.
    private static string logicAppUri = @"https://prod-05.chinanorth.logic.azure.cn:443/workflows/<remaining-callback-URL>";
    
    // Reuse the instance of HTTP clients if possible. For more information, see /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")); 
    }
    

测试逻辑应用工作流

若要进行测试,请使用以下步骤或其他工具将消息添加到服务总线队列:

  1. Azure 门户中,打开你的服务总线命名空间。

  2. 在服务总线命名空间导航菜单中选择“队列”。

    Screenshot of a Service Bus namespace. On the navigation menu, 'Queues' is highlighted.

  3. 选择先前使用服务总线连接链接到函数的服务总线队列。

  4. 在队列导航菜单中选择“Service Bus Explorer”,然后在工具栏上选择“发送消息”。

    Screenshot of a Service Bus queue page in the portal, with 'Send messages' highlighted. On the navigation menu, 'Service Bus Explorer' is highlighted.

  5. 在“发送消息”窗格中,指定要发送到服务总线队列的消息。

    此消息将触发逻辑应用工作流。

后续步骤