微服务,如果一项服务的数据依赖于另一项服务,如何解耦服务?

Microservices, How to decouple services if data on one service depends on other?

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

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

所以我们有 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.

  3. 紧密耦合

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

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

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