本文介绍了睡觉应用编程接口VS AMQP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

内部微服务之间什么时候使用睡觉接口比使用AMQP通信更好、更合理?

我知道使用睡觉接口服务之间的依赖程度会更高,可以说一定要避免使用AMQP吗?

推荐答案

这在很大程度上取决于您的业务/域操作以及您的需求。的确,在大多数情况下,两个微服务之间的大多数通信(或在大多数使用情况下)将通过队列完成。有时需要通过睡觉接口直接调用,也有更好的选择。这取决于您的业务需求。我认为如果你想达到最好的效果,你应该根据情况使用这两种方法。例如,假设您有一个在线商店应用程序,您有4个微服务:

  • 产品-微服务
  • 产品-库存-微服务
  • 支付-小额服务
  • 订单-微服务

使用睡觉接口直接调用

例如,假设您想要最终确定订单,并添加一种付款方式,您将使用该付款方式为购物车中的产品付款。例如,假设您正在用信用卡付款。如果您的业务逻辑规定在您关闭订单之前信用卡必须有效,您需要从订单微服务中调用支付微服务。此调用将与睡觉接口上的直接调用同步,后者将等待响应。在这种情况下,您需要等待响应,因为您的进一步逻辑取决于您的信用卡(支付方式)是否有效。

在这种情况下,发布事件订单微服务,并在支付微服务中监听该事件,会产生更多延迟、更复杂的事件处理逻辑和回滚场景。有人可能会问一个问题:

如果支付微服务关闭或无法访问怎么办?

在队列上使用直接调用还是更复杂的操作都无关紧要。没有支付微服务,您不能继续/结束您的操作。在这种情况下,您可能会返回内部服务器错误或类似错误,并要求客户重试该操作。有时,一些微服务之间的耦合度要高于其他微服务之间的耦合度。这取决于微服务体系结构的设计和操作的复杂性。

使用队列

大多数情况下,微服务之间的通信可以通过队列完成。典型的例子是您在网上商店中创建了一个新产品。product-microservice创建一个包含有关该产品的所有信息的产品。当产品被创建并存储在product-microservice-db中时,发布类似"ProductCreatedEvent"的事件。Products-Inventory-Micro-Service监听事件"ProductCreatedEvent",并将有关该产品的信息保存到product-Inventory-Micro-service-db中(例如产品数量、每个商店的可用性等)。在产品-库存-微服务将该产品包括在其库存中之后,该产品就可以销售了。此时,顾客可以将该产品放到购物车中。回到产品的创造上来。事实上,当您创建产品时,它不必立即显示在库存中。从业务角度看,您可以接受这样一种情况,即您刚刚创建的产品(最终)出现在库存中时会有50ms、100ms、1s.10s或10分钟的延迟。即使产品-库存-微服务在产品创建期间停机,也不会停止产品创建操作。一旦产品-库存-微服务启动并运行,它将处理"ProductCreatedEvent",产品将可供销售。

这两个操作示例经过简化,仅为您提供了一个可以有不同用例的示例。当然,你可以用不同的方式来做这件事,但是想法是为了给你举个例子。您可以看到,这两个具有完全不同业务上下文的操作可以根据业务需求以两种不同的方式完成。

绝对不是。使用微服务的分布式系统将具有需要使用通过睡觉应用编程接口、某种其他协议(如SOAP(或某种其他协议))从微服务到微服务的直接调用的操作。有时您需要同步和阻塞调用。对于大多数操作和业务域来说,这可能是罕见的情况,但在需要时将其作为选项仍然非常重要。您可以在此答案here中了解微服务之间的通信方式。

这篇关于睡觉应用编程接口VS AMQP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-19 12:12