Microservices 微服务的正确结构-基于订阅的模型

Microservices 微服务的正确结构-基于订阅的模型,microservices,Microservices,我有用户服务,课程服务和订阅服务,电子邮件服务。 它们应如何相互作用以实现以下目标: 用户订阅课程(用户选择课程)(单个/多个课程) 向课程添加用户(我们单击课程并向其添加用户)(单个/多个用户) 订阅时会发送电子邮件,详细信息请与用户和课程服务联系 我知道这是一个抽象的问题,但如果您能为我指明正确的方向,那将非常有帮助。根据我的经验,如果您有两个相关的服务,并且它们都需要另一个服务的部分信息(用户和课程的情况),出于性能原因,您应该存储另一个服务的信息 我的意思是,在用户中,您应该存储每个用户

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

  • 用户订阅课程(用户选择课程)(单个/多个课程)
  • 向课程添加用户(我们单击课程并向其添加用户)(单个/多个用户)
  • 订阅时会发送电子邮件,详细信息请与用户和课程服务联系

  • 我知道这是一个抽象的问题,但如果您能为我指明正确的方向,那将非常有帮助。

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

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

    保持信息正确同步的方法可以是使用类似kafka的消息代理,其中每个服务将发布每个修改,而其他服务将使用它

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

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

    对于通知服务,我认为最好的方法是从MessageBroker中侦听其他主题的服务,其他服务将在那里发布一个命令,以便在订阅时发送电子邮件