继续SpringSession。今天看怎么用。
用SpringSession得借助第三方的力量Nginx和Redis。Nginx负责反向代理用户请求并对请求进行转发到不同的机器上,Redis负责存储session。这里我只是做个测试而已,所以用windows版本的Nginx和Redis。真实的应该在Linux中或者docker中。
windows版的Nginx构建:
第一步:去官网下载windows版本:官网地址:http://nginx.org/en/download.html 我这里使用的是1.10.3的版本。
下载完成对应的压缩包为: nginx-1.10.3.zip,进行解压操作!【注:解压的目录一定不要含有中文,否则访问出错!】
第二步:配置nginx,这里配置nginx全部使用默认的即可。
注意不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程。
在nginx.exe目录,打开命令行工具,用命令 启动
1.进入解压的目标,我的 E:\nginx-1.10.3
2.执行启动命令 ,有一个一闪而过的效果!
start nginx.exe
启动以后输入http://localhost:80去浏览器看看,如下图则启动成功:
第三步:
第三步:配置nginx中的反向代理:
1.备份nginx.conf一份,然后修改nginx.conf文件
2.修改使用反向代理upstream,进行负责均衡负载
保存配置后保存,接下来我们看一下简单的一些nginx命令:
windows版的Redis搭建:
https://github.com/MSOpenTech/redis这个链接可以下载,但是现在速度很慢很慢。大家可以搜索https://www.jb51.net/softs/541181.html去脚本之家下载.
下载好以后就去解压,然后进入win+r后可以进入安装目录,启动redis-seriver.exe直接启动。启动好了以后如下图所示:
接下来我们启动客户端:测试一下
测试了一下没啥问题,好了redis没有问题了。但是这只是一个单机版的。
接下来我们继续springsession。
用IAEA开始开发:
第一步:创建一个空白的项目。
1:
2:
3:
第二步:配置在application.xml换成application.yml后配置一下配置:
server: port: 8090 spring: application: name: manager profiles: active: dev redis: host: 127.0.0.1 port: 6379
第三步:引入对应的依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.alibaba</groupId> <artifactId>session-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>session-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Spring session --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第四步:编写测试的Controller
package com.alibaba.comtroller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; @Controller @RequestMapping("/UserController") public class UserController { @RequestMapping("/setUser") public @ResponseBody Map<String,Object> setUser(HttpServletRequest request, HttpServletResponse response) { request.getSession().setAttribute("url", request.getRequestURL()); Map<String,Object> map = new HashMap<>(); map.put("url", request.getRequestURL()); return map; } @RequestMapping("/getUser") public @ResponseBody Map<String,Object> getUser(HttpServletRequest request){ Map<String,Object> map = new HashMap<>(); map.put("sessionId", request.getSession().getId()); map.put("url", request.getSession().getAttribute("url")); map.put("serverName", 8090); return map; } }
第五步:启动的主类上添加注解
package com.alibaba; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @EnableRedisHttpSession public class SessionDemoApplication { public static void main(String[] args) { SpringApplication.run(SessionDemoApplication.class, args); } }
第六步:复制当前的项目一份出来,但是要把对应的端口号改为8080,因为我nginx中监听的就是8080和8090这两个端口。将UserController 中的getUser中添加的端口号改为8080其他的一律不变。
第七步:先启动redis redis-server.exe
第八步:启动nginx
这里说一下nginx需要配置一下:
第九步:启动两个项目:
第十步:在浏览器中访问:
先访问:http://localhost/UserController/setUser
接着改为:http://localhost/UserController/getUser可以看到获取到的session和对应的服务。
然后我们不断的刷新当前页面:
我们看提下redis中的数据:
以上就是基于SpringSession的分布式回话管理的简单案例。这里用到的第三方回话管理的工具是redis。如果要用到其他的mongdb的话在启动类上面加上相应的注解就是。下一次我们聊聊用这个sessionId我们能干嘛。