微服务中的循环API调用

时间:2019-01-21 13:27:12

标签: rest web-services microservices loose-coupling

假设有两项服务,

  1. 产品服务
  2. 优惠券服务

优惠券已针对该产品进行了标记。当为任何产品更改优惠券时,都会有一个从产品服务到优惠券服务的API调用,该API会计算优惠券折扣并将其发送回产品服务。产品服务维护该缓存。但是,要计算折扣,优惠券服务需要产品信息,例如产品类别,SKU类型等,并且折扣基于此而变化,因此再次有对产品服务的API调用,使其成为循环调用。有两种解决方案,

  1. 在优惠券服务处维护产品缓存。 -这是一个开销,因为我们需要在每次产品字段更新时都维护缓存,这不是我们正在寻找的解决方案。
  2. 当产品服务对优惠券服务进行API调用时,请发送其所需的所有字段-这种方法紧密耦合。

解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您决定为此需要2种不同的服务,那么我同意周期性依赖是一种不好的做法,值得一试。

但是,我真的没有看到这里需要它。我认为“优惠券”服务需要了解“产品”服务,但反之亦然。

您遇到的问题是,优惠券服务需要响应产品服务上发生的更改。现在,您通过让产品服务向优惠券服务发送消息来解决此问题。

一些解决方法包括:

  1. 让优惠券服务偶尔轮询更新。
  2. 部署发布订阅系统。进行您可以订阅的“产品更改”,并让优惠券订阅。

我会建议第三个选择。在我看来,产品服务中根本不应该存在“优惠券变更”这一概念。为什么呢听起来您实际上可能有3种不同的服务:

  1. 产品信息
  2. 优惠券信息
  3. 购物车