SpringBoot开发中分布式集群共享Session的示例分析

SpringBoot开发中分布式集群共享Session的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有潜江免费网站建设让你可以放心的选择与我们合作。

前言

在分布式系统中,为了提升系统性能,通常会对单体项目进行拆分,分解成多个基于功能的微服务,如果有条件,可能还会对单个微服务进行水平扩展,保证服务高可用。

那么问题来了,如果使用传统管理 Session 的方式,我们会遇到什么样的问题?

案例

这里拿下单举例,用户小明在天猫上相中了一个的娃娃,觉得不错,果断购买,选尺寸,挑身高,然后确认选择,赶紧提交订单,然后就跳转到了登录页面!小明表示很郁闷,大写的问号???

小明进入娃娃页面,此时请求通过代理服务发送到业务系统一。  小明选尺寸,挑身高,此操作并没有对后端服务发送请求。  小明提交订单,此时请求通过代理服务发送到业务系统二,然鹅,二系统此时并没有查询到小明的登录信息,就被无情的跳转到登录页了。

方案

HttpSession 默认使用内存来管理 Session,通常服务端把用户信息存储到各自的 Jvm 内存中。所以小明下单的时候找不到登录信息,那么我么何不把用户信息集中存储!?

为了测试效果,这里我们搭建一个演示案例,项目涉及 SpringBoot、spring-session、redis、nginx 等相关组件。

pom.xml引入依赖:

 

 org.springframework.session 

 spring-session-data-redis

 

 org.springframework.boot 

 spring-boot-starter-data-redis

配置 redis 参数,软件自行安装:

## redis#session存储类型spring.session.store-type=redisspring.redis.database=0spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.password=123456spring.redis.pool.max-active=8spring.redis.pool.max-wait=-1spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.timeout=3000

简单的用户登录实现,省略部分代码:

@RequestMapping(value="login",method=RequestMethod.POST)public Result login(String username,String password,HttpServletRequest request,HttpServletResponse response) throws Exception {    

SysUser user = userService.getUser(username);    

if(user==null) {      

return Result.error("用户不存在");    }

else {     

 if(user.getPassword().equals(password)) {        

request.getSession().setAttribute("user", user);       

 return Result.ok();      }

else {        return Result.error("密码错误");

      }    }}

配置代理实现,基于 Nginx:

server {    listen    80;    

server_name blog.52itstyle.vip;    

location / {      proxy_pass http://192.168.1.2:8080;    

 }    

location /cart {       proxy_pass http://192.168.1.3:8080$request_uri;

    }    location /order {       

proxy_pass http://192.168.1.4:8080$request_uri;    } }

配置成功后登录系统,在 redis 中查询用户信息:

127.0.0.1:6379> keys *1) "spring:session:expirations:1562577660000"2) "spring:session:sessions:1076c2bd-95b1-4f23-abd4-ab3780e32f6f"3) "spring:session:sessions:expires:1076c2bd-95b1-4f23-abd4-ab3780e32f6f"

看完上述内容,你们掌握SpringBoot开发中分布式集群共享Session的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文名称:SpringBoot开发中分布式集群共享Session的示例分析
网页路径:http://scyanting.com/article/pccsej.html