栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot 分布式Session共享

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot 分布式Session共享

一、在分布式开发时Nginx负载均衡时传统做法是 把session手动存到redis中

1.常用做法redis

客户端发起一个请求,这个请求到达nginx上之后被,nginx转发给tomcatA上,然后再tomcatA上往session保存一份数据(redis),下次又来一个请求 被分到tomcatB上,从redis读取session 此方式可以实现session共享。

2.spring session

使用springsession,springsession是spring中代理过滤器,将所有的session拦截下来自动将数据同步到session中,或者自动的从redis中读取session,不用再手动存取。

二、用法

1.在pom.xml添加依赖

org.springframework.session spring-session-data-redis

注意:

这里我使用的 Spring Boot 版本是 2.1.4 ,如果使用当前最新版 Spring Boot2.1.5 的话,除了上面这些依赖之外,需要额外添加 Spring Security 依赖(其他操作不受影响,仅仅只是多了一个依赖,当然也多了 Spring Security 的一些默认认证流程)

2.配置redis

spring.redis.host=192.168.66.128 spring.redis.port=6379 spring.redis.password=123 spring.redis.database=0

3.使用

@RestController public class HelloController { @Value("${server.port}") Integer port; @GetMapping("/set") public String set(HttpSession session) { session.setAttribute("user", "javaboy"); return String.valueOf(port); } @GetMapping("/get") public String get(HttpSession session) { return session.getAttribute("user") + ":" + port; } }

考虑到一会 Spring Boot 将以集群的方式启动 ,为了获取每一个请求到底是哪一个 Spring Boot 提供的服务,需要在每次请求时返回当前服务的端口号,因此这里我注入了 server.port 。

4.引入Nginx

进入 Nginx 的安装目录的 conf 目录下(默认是在 /usr/local/nginx/conf ),编辑nginx.conf 文件:

1. upstream 表示配置上游服务器

2. javaboy.org 表示服务器集群的名字,这个可以随意取名字

3. upstream 里边配置的是一个个的单独服务

4. weight 表示服务的权重,意味者将有多少比例的请求从 Nginx 上转发到该服务上

5. location 中的 proxy_pass 表示请求转发的地址, / 表示拦截到所有的请求,转发转发到刚刚配置好的服务集群中

6. proxy_redirect 表示设置当发生重定向请求时,nginx 自动修正响应头数据(默认是 Tomcat 返回重定向,此时重定向的地址是 Tomcat 的地址,我们需要将之修改使之成为 Nginx 的地址)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号