SpringBoot中使用Session共享实现分布式部署

文章资讯 2020-06-14 16:22:47

SpringBoot中使用Session共享实现分布式部署

前言:我们知道,在单体项目中,我们将用户信息存在session中,那么在该session过期之前,我们都可以从session中获取到用户信息,通过登录拦截,进行操作
但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要面对session共享的问题,下面介绍的是在SringBoot实现session共享的方式
一、创建项目
创建SringBoot项目,选择Maven依赖
最终om.xml文件如下:
<!--dis的依赖-->
<deendency>
<grouId>org.sringframework.boot<grouId>
<artifactId>sring-boot-starter-data-dis<artifactId>
<deendency>
<!--web的依赖-->
<deendency>
<grouId>org.sringframework.boot<grouId>
<artifactId>sring-boot-starter-web<artifactId>
<deendency>
<!--session共享的依赖-->
<deendency>
<grouId>org.sringframework.session<grouId>
<artifactId>sring-session-data-dis<artifactId>
<deendency>二、配置Redis
我们需要借助dis实现session共享,所以我们需要在配置文件中配置dis的信息
server:
ort:8080sring:
dis:
host:127.0.0.1
ort:6379
database:0
assword:我们配置了该项目的端口,以及dis的连接信息
三、写接口
ackagecom.zyxx.session.controller;imortorg.sringframework.beans.factory.annotation.Value;
imortorg.sringframework.web.bind.annotation.GetMaing;
imortorg.sringframework.web.bind.annotation.RestController;imortjavax.servlet.htt.HttSession;@RestController
ublicclassDemoController{**
*获取项目端口
*
@Value("${server.ort}")
rivateStringort;**
*将信息存放在session中
*
@GetMaing("set")
ublicStringset(HttSessionsession){
session.setAttribute("user","helloworld~~~");
turnort;
}**
*从session中获取信息
*
@GetMaing("get")
ublicStringget(HttSessionsession){
turnsession.getAttribute("user")+":"+ort;
}
}
我们写了一个set,一个get方法,将信息存放在session中,从session中取出信息
四、打包测试启动项目,分别启动在两个端口:
java-jar.session-0.0.1-SNAPSHOT.jar--server.ort=8080
java-jar.session-0.0.1-SNAPSHOT.jar--server.ort=8081分别启动在8080,8081端口
访问:htt:localhost:8080set我们从8080端口,将信息保存在session中
我们访问:htt:localhost:8081get我们在8081端口的项目中从session中取出了内容:helloworld~~~
由此证明,我们的session共享已经成功
五、分布式部署
下面我们借助nginx转发访问这两个项目
1、配置转发
nginx配置文件如下:主要配置内容:
ustamhelloworld{
server127.0.0.1:8080weight=1;
server127.0.0.1:8081weight=2;
}这里配置转发到8080,8081端口,并配置了权重
location{
roxy_asshtt:helloworld;
#roothtml;
#indexindex.htmlindex.htm;
}拦截本地的所有请求,默认端口为80
2、启动nginx
nginx-sload3、访问测试
我们先删除dis里面刚刚测试保存的信息然后我们访问:
htt:localhostset
这里我们可以看出,由8080端口的服务器完成了set请求,多次访问,nginx将会根据什么配置的权重参数分配服务器来完成操作
下面我们访问:
htt:localhostget
可以看出,由8081端口的服务器完成了get请求,并成功取到了存在session中的数据,实现了session共享
六、总结
1、以前我们在SSM架构的项目中实现session共享,需要配置三个地方,一个是web.xml配置过滤器,然后在Sring容器中配置Redis,最后再配置SringSession,相比SringBoot,稍有复杂
2、我们在SringBoot中实现session共享还是非常简单的,只需要引入依赖,简单配置即可实现
3、实现session共享,帮助我们将项目分布式部署,提升服务性能有很大的意义