首页 > 解决方案 > 微服务的正确结构 - 基于订阅的模型

问题描述

我有用户服务、课程服务和订阅服务、电子邮件服务。他们应该如何相互作用以实现以下目标:

  1. 用户订阅课程(用户选择课程)(单门/多门课程)
  2. 将用户添加到课程(我们点击课程和用户)(单/多用户)
  3. 订阅时发送电子邮件,与用户和课程服务人员交谈以获取详细信息

我知道这是一个抽象的问题,但如果你引导我朝着正确的方向前进,那将是非常有帮助的。

标签: microservices

解决方案


根据我的经验,如果您有两个相关的服务并且它们都需要另一个的部分信息(用户和课程的情况),那么出于性能原因,您应该存储另一个服务的信息。

我的意思是,在用户中,您应该存储每个用户订阅的课程的信息(通常是 id 或/和名称),并在课程中存储有关每个用户订阅的用户的信息。

保持信息正确同步的方法可能是使用像 kafka 这样的消息代理,其中每个服务将发布每个修改,而另一个服务将使用它。

例如,当用户退出课程时,用户服务将发布一条消息通知课程,然后这将正确更新,反之亦然。

这种方法的问题是最终的一致性,也许更好的解决方案可能是拥有一个订阅服务,其中订阅逻辑是集中的,然后在其各自的服务中只有用户和课程的特定信息。

在通知服务的情况下,我认为最好的方法是从消息代理侦听其他主题的服务,并且在进行订阅时,其他服务将在那里发布发送电子邮件的命令。


推荐阅读