【问题标题】:Microservices, How to decouple services if data on one service depends on other?微服务,如果一个服务上的数据依赖于另一个服务,如何解耦服务?
【发布时间】:2020-07-09 18:46:16
【问题描述】:

假设我有两个微服务,如下所示:

我有一项服务可以存储所有问题及其答案选项。第二个服务创建将使用来自第一个服务的问题的模块。

所以我们有Question ServiceModule Service

当我们创建模块时:

  1. 客户将查询问题
  2. 客户端将发送带有模块数据的question_id

用户何时尝试完成此模块:

  1. 客户端将查询模块
  2. question_id 会收到问题,并将其选项显示为测试。

现在有一个主要问题。 模块服务如何知道用户的答案是否正确?

现在我认为解决这个问题的方法有两种:

  1. 客户端会询问Question Service这个答案是否正确,然后将结果发送给Module Service。但是,这种方法是不可靠的,因为来自 Client 的请求可能是伪造的,Module Service 会存储错误的结果

  2. 客户端将向Module Service发送应答检查请求,然后通过直接HTTP调用向Question Service发送请求。这也是一个糟糕的解决方案,因为这使得Module ServiceQuestion Service 紧密耦合。

是否有任何解决方案可以将Module ServiceQuestion Service 解耦?

【问题讨论】:

    标签: architecture microservices decoupling


    【解决方案1】:

    做到这一点并且不耦合这两个服务的最佳方法是使用消息队列,它可以是rabbitmq、kafka 或任何其他可以作为这两个服务中间体的工具。

    当用户尝试回答问题时,他会将答案发送给问题服务,因为知道答案的人。然后问题服务检查答案是否正确,并通过消息队列向模块服务发送一条消息,指示用户、模块 ID、试图回答的问题和结果。 然后,模块服务将收到消息并正确更新此用户模块

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2015-09-03
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多