Azure持久功能(外部功能)

时间:2018-04-15 07:00:10

标签: azure azure-functions

我使用Azure功能开发了一些微服务,每个服务都有独立的用例和不同的编程语言。

Micro Services

现在我有一个用例以下面的顺序使用所有服务,所以我开发了一个Azure函数来按给定顺序使用所有服务。代码运行良好。

Aggregate Service

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        string returnValue = string.Empty;
        dynamic data = await req.Content.ReadAsStringAsync();
        if (data == null)
        {
            return req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a value in the request body");
        }
        else
        {
            string body = data.ToString();
            var transformResult = await HttpRestHelper.CreateRequestAsync(AppConfiguration.TransformServiceEndPoint, body, HttpMethod.POST);

            var validationResult = await HttpRestHelper.CreateRequestAsync(AppConfiguration.ValidationServiceEndPoint, transformResult.Result.ToString(), HttpMethod.POST);

            if (validationResult.Result != null && Convert.ToBoolean(validationResult.Result))
            {
                var encryptionResult = await HttpRestHelper.CreateRequestAsync(AppConfiguration.EncryptionServiceEndPoint, transformResult.Result.ToString(), HttpMethod.POST);

                var storageResult = await HttpRestHelper.CreateRequestAsync(AppConfiguration.StorageServiceEndPoint, encryptionResult.Result.ToString(), HttpMethod.POST);
                returnValue = storageResult.Result.ToString();
            }
            else
            {
                returnValue = "Validation Failed";
            }

            return req.CreateResponse(HttpStatusCode.OK, returnValue, "text/plain");
        }
    }

问题

如果每个微服务需要1分钟执行,我必须在我的超级服务中等待~4分钟,并且需要4分钟以上的费用。 (我们不需要为等待时间付费:) https://www.youtube.com/watch?v=lVwWlZ-4Nfs

我想在这里使用Azure Durable函数,但没有任何方法可以调用外部URL。

请帮助我或建议更好的解决方案。

提前致谢

1 个答案:

答案 0 :(得分:1)

Durable Orchestration Functions不适用于任意HTTP端点。相反,您需要创建单个函数作为活动触发。

Orchestration将在幕后使用消息队列而不是HTTP。 HTTP本质上是请求 - 响应,因此您必须保持连接并因此付费。

基于队列的协调器还可以在间歇性故障时为您提供额外的弹性。