继续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我们能干嘛。

本文详细介绍如何利用SpringSession、Nginx和Redis实现分布式会话管理,包括环境搭建、代码配置及测试过程。
5294

被折叠的 条评论
为什么被折叠?



