springboot学习系列:应用集群化之后,session获取值可能会出现为空的情况之解决方案

问题场景

微服务环境下,将一个应用部署为集群式,然后应用内部根据session存取值,会出现问题。因为请求会随机发送到其中几台的机器。本篇博客主要是为了解决该问题。

问题环境

软件版本
springboot2.1.1.RELEASE
redis5

问题原因

因为是构建了应用集群,并通过nginx网关进行转发。在转发请求过程中,会随机分发到其中一台机器。如果是这样的话,就会导致,前一个获取验证码的请求是应用A,而登录验证的请求是应用B接收处理。这里的sessionId可能是一致的,但是就是获取不到值。

解决方案

如果是这样,就得考虑设置一个统一的session控制器。在这里,因为环境是使用了redis集群,所以博主是使用了spring-session-data-redis 依赖进行处理。大家可以根据项目实际情况进行控制。

1、引入依赖

 <dependency>
     <groupId>org.springframework.session</groupId>
     <artifactId>spring-session-data-redis</artifactId>
 </dependency>

2、配置redis

spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.

3、配置spring-session

# Session store type.
spring.session.store-type=redis
# Session timeout. If a duration suffix is not specified, seconds is used.
server.servlet.session.timeout=
# Sessions flush mode.
spring.session.redis.flush-mode=on_save
# Namespace for keys used to store sessions.
spring.session.redis.namespace=spring:login:session

结果

在应用集群情况下,可以正常往session存取值。

总结

针对一种问题场景,可以有很多种解决方案。根据项目实际情况进行选择,才能最大程度利用好手头的资源。

引用

boot-redis

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述
拜拜

posted on 2022-11-29 18:39  枫夜求索阁  阅读(259)  评论(0)    收藏  举报

导航