首页 > 解决方案 > 通过微服务保持身份数据同步的最佳方式?

问题描述

我们实现了如下架构:

  1. 身份服务器 4:我们将其用作身份验证/授权服务,我们有两个内部客户端,用户在身份上被重定向以登录/注册。

  2. Ocelot API Gateway:是一个简单的网关,这个、Identity 和两个前端客户端是我们唯一直接暴露在网络上的服务。我们的前端调用网关,充当我们微服务的某种代理。它还检查用户的授权。

  3. 微服务:在这个网关后面有 6 个微服务,显然可以处理各种事情。其中一个微服务负责处理用户信息。

现在我们的问题是,每当用户在 Identity 上注册时,我们都会通过 rabbit 发送消息来更新用户微服务。但我们也需要做相反的事情:每当用户更新他的姓名或姓氏时,我们必须在用户微服务中更改它并通知身份。

关于这类问题的最佳做法是什么?

我们正在考虑只在 rabbit 中保持身份监听队列,但这意味着来自身份的信息流将是双向的,这可能是一个问题。

我们还考虑更改“更新配置文件”消息的“接收者”,将其发送到身份,最终将更新姓名和姓氏,并通过兔子将信息转发到我们的微服务,但这意味着:

  1. 身份将收到一个巨大的有效负载,并且将有效地使用该有效负载的两个字段。

  2. 此方法将不再位于网关后面。

我们也在考虑只是不关心保存在身份中的姓名和姓氏,并将它们从身份中的数据库中完全删除。

你对此有何看法?

标签: c#architecturemicroservicesidentityserver4gateway

解决方案


一种选择如下:

您可以向访问令牌添加用户名声明。然后每个接收访问令牌的服务都会将其与自己的数据库进行比较,如果不同则更新。这样您就不需要在服务之间进行任何单独的后台通信。把事情简单化!


推荐阅读