1.创建SpringBoot项目添加依赖

<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>

2.完整pomxml文件

<?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 https://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.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sunny.spring.boot</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--session相关-->
<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> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

3.application.yml配置

redis连接信息需要修改为自己的

spring:
session:
store-type: redis #session的存储方式
redis:
host: ...
port:
password: admin@1009

4.创建Controller获取session信息

package com.sunny.spring.boot.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; /**
* @ClassName: SessionController
* @Description: session操作
* @Author: sunt
* @Date: 2019/8/26 14:53
* @Version 1.0
**/
@RequestMapping("/session")
@RestController
public class SessionController { /**
* 获取session信息
* @param request
* @return
*/
@RequestMapping("/getSeesion")
public String getSeesion(HttpServletRequest request) {
String sessionId = request.getSession().getId();
int serverPort = request.getServerPort();
System.out.println("当前请求session:" + sessionId);
return "请求服务器端口号:" + serverPort + ",当前服务器的seionId:" + sessionId;
} }

5.启动redis服务

6.启动项目并访问

启动如果报如下错误信息,需要检查redis连接信息是否配置准确

本地访问:http://127.0.0.1:8080/session/getSeesion 可以获取到sessionid说明项目可以正常启动和访问,接下来需要配置nginx部署多个应用程序实现负载均衡

7.nginx负载均衡配置

编辑nginx.conf配置文件,需要做如下配置即可

  • 在http节点配置所需负载的应用地址
#配置负载地址
upstream session-redis {
server 127.0.0.1: weight=; #weight是权重的意思,值越大分配访问的概率越大
server 127.0.0.1: weight=;
server 127.0.0.1: weight=;
}

  • 在server节点下的location配置访问地址
 proxy_pass http://session-redis;

注意:session-redis必须要与上一步upstream后面的名称保持一致,这个名称无要求自己随意指定

  • 校验nginx配置文件是否准确并重新加载nginx配置信息
./sbin/nginx -t
./sbin/nginx -s reload

8.部署多个应用程序

按照nginx负载均衡配置,同一个应用程序以18081,18082,18083端口部署三份,并为各自端口分别指定输出日志到server1.log、server2.log、server3.log

nohup java -jar springboot-demo-0.0.-SNAPSHOT.jar --server.port= > server1.log &  
nohup java -jar springboot-demo-0.0.-SNAPSHOT.jar --server.port= > server2.log & 
nohup java -jar springboot-demo-0.0.-SNAPSHOT.jar --server.port= > server3.log &  

9.测试

浏览器访问默认nginx的80端口,如果可以正常转发到各个应用程序并且访问到每个应用程序的session会话一致说明配置负载和session共享搭建成功

这里本来打算录制个gif操作图,但是录制了好几次都太大只能保存一部分,有好的gif录制麻烦评论区推荐一波,这里就截图展示

通过浏览器访问获取session请求:http://192.168.31.170/session/getSeesion不断刷新,可以看到sever*.log随机输出日志,但是访问到serve1的频率最低(1次),说明我们配置的权重也生效

页面访问展示

日志文件截图展示

10.查看redis缓存session信息

最新文章

  1. Javascript模式(第一章简介)------读书笔记
  2. libnode 0.4.0 发布,C++ 语言版的 Node.js
  3. php页面静态化
  4. ZOJ 3703 Happy Programming Contest(DP)
  5. java web 下实现文件下载
  6. gcc 的编译过程
  7. VC++2005、VC2008中Release版本设置为可调试的设置方法
  8. openstack私有云布署实践【14.1 登录页dashboard-controller(科兴环境)】
  9. A. Mike and Cellphone(Round 361 Div.2)
  10. ubuntu下pip的安装和使用
  11. Gym101138D Strange Queries/BZOJ5016 SNOI2017 一个简单的询问 莫队、前缀和、容斥
  12. Mysql 递归获取多重数组数据
  13. e1000e 网卡如遇到大包未线速问题解法
  14. css 书目录相关css+html代码
  15. 10 Tips for Optimizing Your Website’s Speed
  16. iOS开发UI篇章 15-项目中的常见文件
  17. [leetcode-921-Minimum Add to Make Parentheses Valid]
  18. C++ 类的复制控制
  19. JAVA实验一20145315
  20. Activiti 教程

热门文章

  1. 4GB以上超大文件上传和断点续传服务器的实现
  2. Numpy | 02 Ndarray 对象
  3. ESA2GJK1DH1K微信小程序篇: 测试微信小程序扫描Air202上面的二维码绑定设备,并通过MQTT控制设备
  4. “知乎杯”2018 CCF 大学生计算机系统与程序设计竞赛 分组加密器(encryption)
  5. 某邀请赛misc key阉割发行版
  6. 论文阅读 | Recurrent Attentional Reinforcement Learning for Multi-label Image Recognition
  7. HTML5快速写页面的方法
  8. convmv 解决GBK 迁移到 UTF-8 ,中文 文件名乱码
  9. python mysql数据库压力测试
  10. 使用trace文件分析ANR