1

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

服务

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

所以我们有Question ServiceModule Service

当我们创建模块时:

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

当用户将尝试完成此模块时:

  1. 客户端将查询模块
  2. question_id它将得到问题及其选项以显示为测试。

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

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

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

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

有什么解决方案可以解耦Module ServiceQuestion Service

4

1 回答 1

1

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

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

于 2020-03-30T06:51:40.440 回答