【问题标题】:Adding an item in a microservice, with reference to another one在微服务中添加一个项目,参考另一个项目
【发布时间】:2015-09-03 16:48:25
【问题描述】:

上下文

我有两个微服务:

  • 管理用户的用户(crud 操作)
  • 管理帐单信息的帐单,参考用户

实际上,对我来说(告诉我是否错了)使用 hatoas 将用户信息存储到计费数据中是个好主意。所以我们可以通过 API 响应中的超链接“遍历它”对吗?

我们可以得到类似的东西:

billing:{
// some informations
   _links:{
     owner:"http://80.80.80.80:7000/users/123456789"
   }
}

问题

  • 我应该怎么做,创建一个新的账单?事实上,当有人在微服务上发布新账单时,他也会发送给用户。这是否意味着我需要在我的 Billing 服务和我的 User Service 中有一个 UserEntity ?所以计费服务将能够编组请求,这意味着两个服务之间的代码重复?还是我应该做点别的?

  • 那么,这是前端(API 使用者)的角色来发出 2 个请求(一个用于计费,一个用于与计费相关的用户)以获取资源吗?还是说BillingService应该先得到User再响应前面?

  • 我在一篇文章中看到,在处理微服务的时候使用amqp/bus是个好东西,可以知道一个资源是否存在,或者检查它是否存在。现在我们需要一个服务容器/注册表来动态发现其他服务。就我而言,我使用 Zookeeper。但是我该怎么做才能告诉 Zookeeper “给我与资源相关的服务的位置与 hatoas 链接:http://80.80.80.80:7000/users/123456789”?我是否遗漏了我的 hateoas 架构中的重要信息?

【问题讨论】:

    标签: rest amqp hateoas microservices


    【解决方案1】:

    我应该怎么做,创建一个新的帐单?事实上,当有人发布 微服务的新计费,他也发送给用户。是不是意味着 我需要在我的计费服务和我的用户中有一个 UserEntity 服务 ?因此计费服务将能够编组请求, 意味着两个服务之间的代码重复?或者我应该做 还有什么?

    计费服务需要的用户与用户服务中的用户不同。通常,用户的身份是发布新账单所需的所有消费者。如果计费服务需要更多用户信息,可以向用户服务查询。这里可能有一些代码重复,但代码在每个服务中扮演不同的角色,这意味着它们可以在不相互干扰的情况下发展。有些问题可以在这里进一步解释:Bounded contexts sharing a same aggregate, Handling duplication of domain logic using DDD and CQRS

    那么,这就是前端(API消费者)的角色来制作2 请求(一个用于计费,一个用于与 计费)获取资源?或者 Bil​​lingService 是否应该得到 用户回复前?

    我认为它为 API 使用者导航链接带来了最大的灵活性。如果消费者对所有者的详细信息不感兴趣怎么办?

    我在一篇文章中看到,使用amqp/bus是个好东西 在处理微服务时,要知道资源是否存在,或者 检查它是否存在。现在我们需要一个服务容器/注册表来 动态发现其他服务。就我而言,我使用 Zookeeper。但 我该怎么做才能告诉 Zookeeper “给我服务的位置 与带有 hatoas 链接的资源相关: http://80.80.80.80:7000/users/123456789" ?我错过了一个重要的 我的 hateoas 架构中的信息?

    这个不太明白。如果消费者已经有“http://80.80.80.80:7000/users/123456789”这样的链接,它可以直接访问资源。为什么要问动物园管理员?我认为动物园管理员帮助计费服务为所有者组装 URI。例如,计费服务告诉动物园管理员“给我与用户资源相关的服务的位置”。

    【讨论】:

    • 感谢您的帮助。最后一个小问题,如果我需要添加计费并将用户“链接”到 hatoas,我应该向计费服务发送什么样的信息?我的意思是在帖子请求中?这意味着我必须将完整的 http 链接直接从我的前面发送到我的后面?还是我应该只从后面做?
    • 我觉得“billing:{ owner-id:"123456789"}" 就够了。
    • 然后在后端我必须将它翻译成仇恨请求?就像在队列中发送“谁是用户 123456789?”
    【解决方案2】:

    另一种解决方案是将所有必要的信息存储在这两个服务中。例如,如果您需要帐单中的用户数据,则只需将所有数据也存储在帐单数据存储中。您将通过队列(订阅/发布)进行的两种服务之间的同步。这有利有弊,但如果您想接收特定计费的数据,最终您将获得一个 同步 http 调用。

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多