如何使用工作流在 Azure 上设计微服务系统以按顺序调用它们
How to design MIcroservice system on azure with workflow to call them in order
我在 .net core 2.2 上创建了大约 10 个微服务,MongoDB 并将它们部署在 Azure Kubernetes 上,但我很难理解如何在服务器上管理它。
所有服务都是相互独立的,但必须按一定顺序调用才能进行处理。
我很困惑什么是设计工作流架构的最佳解决方案,它可以根据需要执行这些服务(Azure 逻辑应用程序或功能应用程序或任何其他建议)
谢谢,
假设您有一个 apiGateway(身份验证器微服务或您的任何其他微服务),您可以通过入口规则将其指向 URL。
该服务应承载第一部分操作应调用的微服务,一旦完成,它可以向层次结构中的下一个微服务发送同步调用,依此类推。
说-
API 网关有 -
service1:8080/api/{uri}
这会将您带到 service1,然后 service1 执行其任务并将控制权移交给 service2,依此类推
我想您正在寻找的是 Saga 模式,它可以通过编排或编排来实现。你可以在这里找到很好的解释:
https://microservices.io/patterns/data/saga.html
PS:对于 Azure Functions,您可以使用 Durable Functions 并非常轻松地实现 Orchestration:
public static class OrderSaga
{
[FunctionName("OrderSaga")]
public static async Task<bool> RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context)
{
var orderId = context.GetInput<Guid>();
Task<bool> orderResponse = context.CallActivityAsync<bool>("OrderActivity", orderId);
Task<bool> paymentResponse = context.CallActivityAsync<bool>("PaymentActivity", orderId);
await Task.WhenAll(orderResponse, paymentResponse);
if (orderResponse.Result == false || paymentResponse.Result == false)
{
await context.CallActivityAsync("RollbackOrderActivity", orderId);
await context.CallActivityAsync("RollbackPaymentActivity", orderId);
return false;
}
return true;
}
我在 .net core 2.2 上创建了大约 10 个微服务,MongoDB 并将它们部署在 Azure Kubernetes 上,但我很难理解如何在服务器上管理它。 所有服务都是相互独立的,但必须按一定顺序调用才能进行处理。 我很困惑什么是设计工作流架构的最佳解决方案,它可以根据需要执行这些服务(Azure 逻辑应用程序或功能应用程序或任何其他建议) 谢谢,
假设您有一个 apiGateway(身份验证器微服务或您的任何其他微服务),您可以通过入口规则将其指向 URL。
该服务应承载第一部分操作应调用的微服务,一旦完成,它可以向层次结构中的下一个微服务发送同步调用,依此类推。
说-
API 网关有 -
service1:8080/api/{uri}
这会将您带到 service1,然后 service1 执行其任务并将控制权移交给 service2,依此类推
我想您正在寻找的是 Saga 模式,它可以通过编排或编排来实现。你可以在这里找到很好的解释:
https://microservices.io/patterns/data/saga.html
PS:对于 Azure Functions,您可以使用 Durable Functions 并非常轻松地实现 Orchestration:
public static class OrderSaga
{
[FunctionName("OrderSaga")]
public static async Task<bool> RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context)
{
var orderId = context.GetInput<Guid>();
Task<bool> orderResponse = context.CallActivityAsync<bool>("OrderActivity", orderId);
Task<bool> paymentResponse = context.CallActivityAsync<bool>("PaymentActivity", orderId);
await Task.WhenAll(orderResponse, paymentResponse);
if (orderResponse.Result == false || paymentResponse.Result == false)
{
await context.CallActivityAsync("RollbackOrderActivity", orderId);
await context.CallActivityAsync("RollbackPaymentActivity", orderId);
return false;
}
return true;
}