比如我们有一个微服务架构的应用。服务使用事件总线相互通信,如下所示:
UserCreated
事件UserCreated
事件UserCreated
事件中的用户存储到自己的数据库中因此,我们在某些服务中复制数据。这在微服务架构中没问题。但是处理这些数据的代码又如何呢?例如,用户可能有
isPublic
字段。如果 isPublic
字段为 false,则用户的个人资料信息仅对用户本人和具有管理员权限的用户可见。
因此,UserService 和 TeamService 必须具有相同的代码来处理此逻辑。或者是否有另一种方法可以在不重复代码的情况下处理
isPublic
字段?
您可以构建一个包含公共代码的库,并将其添加为
UserService
和TeamService
中的依赖项
在微服务架构中,数据可以在多个服务中复制,例如用户服务和团队服务,但只有一项服务拥有并提供数据。例如,用户个人资料数据归用户服务所有,并且应仅由用户服务提供。
因此,如果任何 UI 或其他服务想要显示个人资料服务,那么它会向用户服务提出相同的要求,如果个人资料不公开,用户服务可能会拒绝(访问被拒绝)。
解决此问题的一种方法是禁止其他服务直接处理用户相关逻辑。相反,希望执行此类逻辑的服务应调用用户服务来执行所需的逻辑。根据您的要求和特定服务,调用也可以是异步的,以符合事件驱动的架构。