对于在分布式环境中运行的Spring应用程序,我们使用Spring会话(由关键的Gemfire备份)。
在这样一个分布式的环境中,
Spring会话是否确保为跨不同JVM创建的新会话使用唯一的会话id?
发布于 2016-06-15 22:01:08
只是回顾一下Spring会话关键GemFire支持的旧SO帖子,所以我很抱歉您的问题没有得到及时的回答。
简而言之,Session使用UUID类生成“唯一”会话ID。例如,请参阅这里,或者更一般地看这里。
注意:缺省情况下,Session支持使用/包装 MapSession类来存储会话状态。
对于集群中跨JVM的讨论的有效性(或者说唯一性),似乎有很多UUID。这个特别是一个虽然过时了,但引起了我的注意,因为它起源于Oracle社区论坛。
但是,请记住,最终确定会话ID是否唯一的是应用程序对Session的使用;也就是说,它不依赖于GemFire集群中的节点数量,因为单个GemFire节点没有生成会话ID(使用Session的应用程序)。
因此,如果只有一个应用程序(可能在世界的Microservices状态中不太可能)出现在Spring会话中,那么UUID就有可能被保证是唯一的。即便如此,基于参考文献可用,使用Spring会话的2个或更多“应用程序”节点生成冲突的ID(虽然,(几乎?)一切皆有可能;-)
不过,我想,如果它是最重要的,遵循Spring的美丽传统,那么扩展 GemFireOperationsSessionRepository并覆盖createSession()方法,调用适当的GemFireSession 构造函数来传递所需的会话ID将是一件简单的事情。
但是,在所有情况下(GemFire、Redis等),会话ID唯一性问题都与底层备份数据存储无关。
希望这能帮上忙。
干杯!
https://stackoverflow.com/questions/34588960
复制相似问题