在单独的用户服务中检查用户是否存在。使用 JWT user_id 还是编排?

问题描述 投票:0回答:1

所以我带着另一个关于设计微服务项目应用程序的问题回来了。

想象一下我们拥有这两个微服务:
用户管理(存储user_id +有关用户的其他内容)
帖子管理(存储用户的帖子,显然需要 user_ids 的副本/引用)

我的问题是,我确实考虑过将 user_id 存储在 JWT 中并利用它。当用户创建帖子时,这可以完美地工作,但会出现问题。当管理员删除该用户的帐户时会发生什么?该用户的 jwt 可能仍然可用(即使我使用短暂的 jwt,例如 15 分钟),并且他可能能够在帖子服务中创建新帖子,尽管不再有帐户。

我想到的另一件事(我还是个新手,所以我不确定哪一个是最好的课程)是每次我们发出帖子请求时,我们只是在后期服务中创建帖子而不立即检查,但是尝试将事件异步发送到用户服务,该服务将“检查”用户是否存在。如果用户服务没有返回任何内容,那么一切都可以,但是如果它返回类似 UserDoesNotExistEvent 的内容,我们将从后期服务中删除所有帖子。现在出现的问题是 id 发出这些异步请求(即使它们是异步的),我必须在每次创建新帖子时发出它们。这个可以吗?通过创建很快就会被删除的帖子,是否会使用户服务和帖子服务超载?

我该怎么办?

我希望这非常有效,但这毕竟只是最后一年的项目,所以它不是一个我能赚钱的产品,但我想尽可能多地学习有关微服务的知识实践和权衡。

编辑! 好吧,实际上已经想到了一些事情,很想听听您对此的看法。如果当我删除用户并且用户服务向后期服务发送事件时,我不删除该用户的帖子,而是存储我想要删除的用户的所有 user_id,该怎么办?我可以有某种计划任务,它会每小时左右删除那些“users_to_be_deleted”,我认为这会解决我之前遇到的问题,但当然用户仍然可以发布内容,直到他们的 jwt 过期。

java node.js asynchronous architecture microservices
1个回答
0
投票

最简单的方法就是检查每个帖子上的

user
服务。用户服务可以返回用户的存在以及任何权限。如果用户被授权发帖,您就允许他们发帖。如果他们不存在,或者无权发帖,你就不允许他们发帖。
user
服务应该缓存请求,然后在删除用户时破坏缓存。像这样在每个请求上调用身份验证服务是相当标准的,并且通常在 API 中间件中实现。

© www.soinside.com 2019 - 2024. All rights reserved.