我在 .net core 2.2、MongoDB 上创建了大约 10 个微服务,并将它们部署在 Azure Kubernetes 上,但我很难理解如何在服务器上管理它。所有服务相互独立,但必须按特定顺序调用才能进行处理。我很困惑设计一种可以根据需要执行这些服务的工作流架构的最佳解决方案(Azure Logic 应用程序或 Function App 或任何其他建议)谢谢,
问问题
313 次
2 回答
1
我想您正在寻找的东西被称为 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;
}
于 2019-11-19T15:29:04.020 回答
0
假设您有一个 apiGateway(身份验证器微服务或您的情况下的任何其他服务),您可以通过入口规则将其指向一个 URL。
该服务应携带在操作的第一部分应调用的微服务,一旦完成,它可以向层次结构中的下一个微服务发送同步调用,依此类推。
说 -
API网关有 -
service1:8080/api/{uri}
这会将您带到 service1,然后 service1 执行其任务并将控制权移交给 service2,依此类推
于 2019-11-19T12:22:39.640 回答