c# - 通过微服务保持身份数据同步的最佳方式?
问题描述
我们实现了如下架构:
身份服务器 4:我们将其用作身份验证/授权服务,我们有两个内部客户端,用户在身份上被重定向以登录/注册。
Ocelot API Gateway:是一个简单的网关,这个、Identity 和两个前端客户端是我们唯一直接暴露在网络上的服务。我们的前端调用网关,充当我们微服务的某种代理。它还检查用户的授权。
微服务:在这个网关后面有 6 个微服务,显然可以处理各种事情。其中一个微服务负责处理用户信息。
现在我们的问题是,每当用户在 Identity 上注册时,我们都会通过 rabbit 发送消息来更新用户微服务。但我们也需要做相反的事情:每当用户更新他的姓名或姓氏时,我们必须在用户微服务中更改它并通知身份。
关于这类问题的最佳做法是什么?
我们正在考虑只在 rabbit 中保持身份监听队列,但这意味着来自身份的信息流将是双向的,这可能是一个问题。
我们还考虑更改“更新配置文件”消息的“接收者”,将其发送到身份,最终将更新姓名和姓氏,并通过兔子将信息转发到我们的微服务,但这意味着:
身份将收到一个巨大的有效负载,并且将有效地使用该有效负载的两个字段。
此方法将不再位于网关后面。
我们也在考虑只是不关心保存在身份中的姓名和姓氏,并将它们从身份中的数据库中完全删除。
你对此有何看法?
解决方案
一种选择如下:
您可以向访问令牌添加用户名声明。然后每个接收访问令牌的服务都会将其与自己的数据库进行比较,如果不同则更新。这样您就不需要在服务之间进行任何单独的后台通信。把事情简单化!