1.创建SpringBoot项目添加依赖

  1. <dependency>
  2. <groupId>org.springframework.session</groupId>
  3. <artifactId>spring-session-data-redis</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-data-redis</artifactId>
  8. </dependency>

2.完整pomxml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.7.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.sunny.spring.boot</groupId>
  12. <artifactId>springboot-demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springboot-demo</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. <!--session相关-->
  36. <dependency>
  37. <groupId>org.springframework.session</groupId>
  38. <artifactId>spring-session-data-redis</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-data-redis</artifactId>
  43. </dependency>
  44.  
  45. </dependencies>
  46.  
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-maven-plugin</artifactId>
  52. </plugin>
  53. </plugins>
  54. </build>
  55.  
  56. </project>

3.application.yml配置

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

  1. spring:
  2. session:
  3. store-type: redis #session的存储方式
  4. redis:
  5. host: ...
  6. port:
  7. password: admin@1009

4.创建Controller获取session信息

  1. package com.sunny.spring.boot.controller;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7.  
  8. import javax.servlet.http.HttpServletRequest;
  9.  
  10. /**
  11. * @ClassName: SessionController
  12. * @Description: session操作
  13. * @Author: sunt
  14. * @Date: 2019/8/26 14:53
  15. * @Version 1.0
  16. **/
  17. @RequestMapping("/session")
  18. @RestController
  19. public class SessionController {
  20.  
  21. /**
  22. * 获取session信息
  23. * @param request
  24. * @return
  25. */
  26. @RequestMapping("/getSeesion")
  27. public String getSeesion(HttpServletRequest request) {
  28. String sessionId = request.getSession().getId();
  29. int serverPort = request.getServerPort();
  30. System.out.println("当前请求session:" + sessionId);
  31. return "请求服务器端口号:" + serverPort + ",当前服务器的seionId:" + sessionId;
  32. }
  33.  
  34. }

5.启动redis服务

6.启动项目并访问

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

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

7.nginx负载均衡配置

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

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

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

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

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

8.部署多个应用程序

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

  1. nohup java -jar springboot-demo-0.0.-SNAPSHOT.jar --server.port= > server1.log &
  1. nohup java -jar springboot-demo-0.0.-SNAPSHOT.jar --server.port= > server2.log &
  1. 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信息

SpringBoot2.x+Redis+nginx实现session共享和负载均衡的更多相关文章

  1. springboot+spring session+redis+nginx实现session共享和负载均衡

    环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...

  2. Nginx + Memcached 实现Session共享的负载均衡

    session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...

  3. Tomcat+Redis+Nginx实现session共享(Windows版)

    redis安装:xx nginx安装:xx 步骤: 1.下载tomcat-redis-session-manager相应的jar包,主要有三个: wget https://github.com/dow ...

  4. .Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享

    前言:虽说公司app后端使用的是.net core+Redis+docker+k8s部署的,但是微信公众号后端使用的是IIS部署的,虽说公众号并发量不大,但领导还是使用了负载均衡,所以在介绍docke ...

  5. net core+Redis+IIS+nginx实现Session共享

    .Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享   前言:虽说公司app后端使用的是.net core+Redis+docker+ ...

  6. SpringBoot2.x 整合Spring-Session实现Session共享

    SpringBoot2.x 整合Spring-Session实现Session共享 1.前言 发展至今,已经很少还存在单服务的应用架构,不说都使用分布式架构部署, 至少也是多点高可用服务.在多个服务器 ...

  7. .Net Core Web Api实践(三).net core+Redis+docker实现Session共享

    前言:上篇文章介绍了.net core+Redis+IIS+nginx实现Session共享,本来打算直接说明后续填坑过程,但毕竟好多坑是用docker部署后出现的,原计划简单提一下.net core ...

  8. 基于Redis缓存的Session共享(附源码)

    基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...

  9. 【Spring Session】和 Redis 结合实现 Session 共享

    [Spring Session]和 Redis 结合实现 Session 共享 参考官方文档 HttpSession with Redis Guide https://docs.spring.io/s ...

随机推荐

  1. 基于docker-compose部署 简单nsq 集群

    主要目的是搭建一个测试环境,同时使用了nodejs 客户端sdk nsq 简单了解 nsqd:一个负责接收.排队.转发消息到客户端的守护进程 nsqlookupd:管理拓扑信息并提供最终一致性的发现服 ...

  2. 用于C# 的异步,持久的键值存储 Akavache 使用

    Akavache是​​一个异步的,持久的(即写入磁盘)键值存储,用于在C#中编写桌面和移动应用程序,基于SQLite3.Akavache非常适合存储重要数据(即用户设置)以及过期的缓存本地数据. 开源 ...

  3. javascript冒泡排序 至少比较N(N-1)/2次;

    <script type="text/javascript"> function get(){ var num = [10,5,2,1,3,6,4,7,9,8]; va ...

  4. nginx之echo模块与内置变量

    Nginx扩展第三方模块——echo 第三方模块是对nginx的功能扩展,第三方模块需要在编译nginx的时候使用参数--add-module=PATH指定扩展模块的源码包路径给Nginx扩展添加ec ...

  5. 数据结构HashMap哈希表原理分析

    先看看定义:“散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. 哈希 ...

  6. nginx 常用全局变量

    变量 说明 $args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2 $content_length HTTP请求信息里的" ...

  7. SpringCloud:Feign模块引用版本问题

    1.问题报错 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import cand ...

  8. ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充

    开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...

  9. 冰多多团队Beta阶段发布说明

    Bingduoduo 语音Coding(Beta):项目Github地址 Beta版本新功能介绍 在beta阶段我们很好地将alpha阶段已经设计好的编辑器和shell整合了起来,推出了一个完整的ID ...

  10. python skimage图像处理(一)

    python skimage图像处理(一) This blog is from: https://www.jianshu.com/p/f2e88197e81d 基于python脚本语言开发的数字图片处 ...