使用Spring Boot在微服务架构中管理会话的位置

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

我是微服务架构的新手。我一直在尝试使用Spring Boot,Spring Cloud和Netflix OSS库构建一个微服务堆栈。我想知道存储会话的正确方法和地点是什么。

以下是我创建的基础架构的概述:

  1. OAuth2支持授权/身份验证服务器
  2. UI服务(Spring Boot,前端服务)
  3. 后端服务-1
  4. 后端服务-2
  5. Redis Server用于存储会话和其他可缓存数据
  6. Discovery Server(尤里卡)

目前,我正在尝试通过配置UI服务来执行它来在Redis中存储会话。它似乎工作正常,虽然我没有机会尝试多个服务实例。但是,我在开发过程中已经遇到了序列化/反序列化问题。顺便说一下,尝试将会话存储在前端应用程序上是正确的地方,还是应该在授权/身份验证服务中完成,因为在该服务中处理身份验证?

这是UI服务中的Session配置(前端服务)

@Configuration
@EnableRedisHttpSession
public class SessionConfig extends 
AbstractHttpSessionApplicationInitializer {

    public SessionConfig() {
        super(RedisConfig.class);
    }
}

总而言之,我期望在这个项目中实现并使用最佳实践。非常感谢您的帮助。

session oauth-2.0 microservices spring-security-oauth2 spring-data-redis
2个回答
0
投票

一般服务器端用户会话和微服务式架构的想法不能很好地结合在一起。原因是您可能会破坏您使用的关注点分离服务的域边界。

请记住,每个服务都应该自动为特定的域问题提供服务 - 包括所有必需的数据持久性。因此,例如,如果用户连接的设备有任何需要记住的内容,您可以在负责这些设备连接的一个服务中执行此操作,而不管其他任何地方。该服务将负责处理这些请求并保持设备所需的任何状态。同样,当有关于用户授权的任何事情需要记住时,您将在授权服务中执行此操作。

关于使用Redis的问题 - 在微服务架构中,存储系统的选择取决于服务架构师。也许一个服务将其数据存储在关系数据库中,也许另一个服务使用键值存储,而另一个服务可能使用事件队列系统或时间序列数据库。

总而言之,您必须问自己您的会话实际用于什么,并使相应的服务负责以特定于域的方式持久保存该信息。 (如果你在问题中提供更多细节,我可以给你我的意见)。


0
投票

您可以在使用REST端点时使用HttpSession进行管理,您可以点击此链接获取更多信息:https://docs.spring.io/spring-session/docs/current/reference/html5/guides/java-rest.html

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