Architecture 微服务,如果一个服务上的数据依赖于另一个,如何解耦服务?
假设我有两个微服务,如下所示: 我有一个存储所有问题及其答案选项的服务。第二个服务创建的模块将使用第一个服务中的问题 因此,我们有Architecture 微服务,如果一个服务上的数据依赖于另一个,如何解耦服务?,architecture,microservices,decoupling,Architecture,Microservices,Decoupling,假设我有两个微服务,如下所示: 我有一个存储所有问题及其答案选项的服务。第二个服务创建的模块将使用第一个服务中的问题 因此,我们有问题服务和模块服务 当我们创建模块时: 客户将询问问题 客户将发送带有模块数据的question\u id 当用户尝试完成此模块时: 客户端将查询模块 通过question\u id它将获得问题及其选项以显示为测试 现在有一个主要问题模块服务如何知道用户的答案正确与否? 现在我认为解决这个问题有两种方法: 如果回答正确,客户端将询问问题服务,然后将结果发送到模块服务
问题服务
和模块服务
当我们创建模块时:
question\u id
question\u id
它将获得问题及其选项以显示为测试问题服务
,然后将结果发送到模块服务
。然而,这种方法是不可靠的,因为来自客户端的请求可能是伪造的,模块服务
将存储不正确的结果模块服务
发送答案检查请求,然后通过直接HTTP调用将请求发送到问题服务
。这也是一个糟糕的解决方案,因为这使得模块服务
与问题服务
紧密耦合是否有任何解决方案可以将
模块服务
与问题服务
解耦?实现这一点且不耦合这两个服务的最佳方法是使用消息队列,它可以是rabbitmq、kafka或这两个服务的中间工具
当用户试图回答一个问题时,他会将他的答案发送给问题服务,因为它是知道答案的人。然后,问题服务检查答案是否正确,并通过消息队列向模块服务发送一条消息,指示用户、模块ID、试图回答的问题以及结果。
然后,模块服务将接收消息并正确更新此用户模块