如何使逻辑应用程序的多个实例运行?

时间:2019-12-18 14:36:29

标签: azure-functions azure-logic-apps

我一直在使用URL触发的Logic应用。

我正在使用基于计时器的azure函数,并通过PostAsync Call调用此逻辑应用程序。

在某个特定时间,一个功能实例可以用不同的ID进行多个PostAsync。

我面临的问题是: 每当我的函数使用不同的ID进行多个PostAsync调用时,理想情况下,逻辑应用应针对多个ID分别运行其多个实例。但这是按顺序接听这些电话的。它会完成一个实例,然后为下一个ID创建一个新实例,依此类推。

但是如果几秒钟后有另一个函数实例在运行,它将接受请求并与第一个实例同时处理它们(一次类似于第一个实例)。

我想要的是,不管函数的实例是否相同,逻辑应用程序都应该为PostAsync调用创建多个实例。

PS:默认情况下,我的逻辑应用程序配置为在并行模式下工作。

1 个答案:

答案 0 :(得分:0)

我在我这边对其进行了测试,并且效果很好,因此我在此处发布了我的逻辑应用程序和azure函数供您参考。

我创建的逻辑应用程序仅包含两个动作,如下面的屏幕截图所示: enter image description here

然后我在azure函数应用程序中创建一个Httptrigger函数,代码如下所示:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Threading;
using System.Net.Http;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    request1(log);
    request2(log);

    return (ActionResult)new OkObjectResult($"Hello world");
}

public static async void request1(ILogger log)
{
    await Task.Run(() =>
    {
        log.LogInformation("do request111");
        HttpClient client = new HttpClient();
        var response = client.PostAsync("http......", null);
    });
}

public static async void request2(ILogger log)
{
    await Task.Run(() =>
    {
        log.LogInformation("do request222");
        HttpClient client = new HttpClient();
        var response = client.PostAsync("http......", null);
    });
}

上面的函数包括两个请求逻辑应用程序触发器的请求,并运行此函数,我们可以在Azure门户的“运行历史记录”列表中看到两个逻辑应用程序实例正在同时运行。 enter image description here

希望对您的问题有帮助〜