SpringBoot开发案例之分布式集群共享Session
时间:2019-08-19
本文章向大家介绍SpringBoot开发案例之分布式集群共享Session,主要包括SpringBoot开发案例之分布式集群共享Session使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
在分布式系统中,为了提升系统性能,通常会对单体项目进行拆分,分解成多个基于功能的微服务,如果有条件,可能还会对单个微服务进行水平扩展,保证服务高可用。
那么问题来了,如果使用传统管理 Session 的方式,我们会遇到什么样的问题?
案例
这里拿下单举例,用户小明在天猫上相中了一个的娃娃,觉得不错,果断购买,选尺寸,挑身高,然后确认选择,赶紧提交订单,然后就跳转到了登录页面!小明表示很郁闷,大写的问号???
- 小明进入娃娃页面,此时请求通过代理服务发送到业务系统一。
- 小明选尺寸,挑身高,此操作并没有对后端服务发送请求。
- 小明提交订单,此时请求通过代理服务发送到业务系统二,然鹅,二系统此时并没有查询到小明的登录信息,就被无情的跳转到登录页了。
方案
HttpSession 默认使用内存来管理 Session,通常服务端把用户信息存储到各自的 Jvm 内存中。所以小明下单的时候找不到登录信息,那么我么何不把用户信息集中存储!?
为了测试效果,这里我们搭建一个演示案例,项目涉及 SpringBoot、spring-session、redis、nginx 等相关组件。
pom.xml引入依赖:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置 redis 参数,软件自行安装:
## redis
#session存储类型
spring.session.store-type=redis
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.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"
小结
这样,小明就可以开心的买娃娃了!
原文地址:https://www.cnblogs.com/xiaobug/p/11376723.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- R语言关于回归系数的解释
- R语言对二分连续变量进行逻辑回归数据分析
- SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
- R语言逻辑回归预测分析付费用户
- R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
- R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
- R语言基于树的方法:决策树,随机森林,套袋Bagging,增强树
- R语言无监督学习:PCA主成分分析可视化
- 如何用r语言制作交互可视化报告图表
- R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
- R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
- R语言里的非线性模型:多项式回归、局部样条、平滑样条、广义加性模型分析
- 使用R语言进行机制检测的隐马尔可夫模型HMM
- 【Kubernetes】Octant再探...
- 聊聊claudb的SlaveReplication