我使用Azure功能开发了一些微服务,每个服务都有独立的用例和不同的编程语言。
现在我有一个用例以下面的顺序使用所有服务,所以我开发了一个Azure函数来按给定顺序使用所有服务。代码运行良好。
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。
请帮助我或建议更好的解决方案。
提前致谢
答案 0 :(得分:1)
Durable Orchestration Functions不适用于任意HTTP端点。相反,您需要创建单个函数作为活动触发。
Orchestration将在幕后使用消息队列而不是HTTP。 HTTP本质上是请求 - 响应,因此您必须保持连接并因此付费。
基于队列的协调器还可以在间歇性故障时为您提供额外的弹性。