SpringBoot 2.0 学习(十)Nginx负载均衡与session共享

SpringBoot 2.0 学习(十)Nginx负载均衡与session共享

负载均衡的使用场景

当项目上线后,如果要修复bug或扩充功能,都需要重启tomcat服务。此时,正在使用应用的用户们就需要等待服务器的重启,而这就会造成不好的用户体验。还有,当仅仅只有一台tomcat服务时,如果CPU或内存达到极限,就会很难顶住压力。而负载均衡就是解决这些问题的方案。
SpringBoot 2.0 学习(十)Nginx负载均衡与session共享_第1张图片

session同步

session在多个服务或服务器间共享,应用实例数量的多少不会影响用户登录状态,多用于(SSO)单点登录
SpringBoot 2.0 学习(十)Nginx负载均衡与session共享_第2张图片

如何在SpringBoot中实现
第一步:添加依赖

	
		org.springframework.boot
		spring-boot-starter-thymeleaf
	

	
		org.springframework.boot
		spring-boot-devtools
		runtime
	
	
	
		org.springframework.boot
		spring-boot-starter-web
	
	
	
        org.springframework.session
        spring-session-data-redis
    
    
    
		org.springframework.boot
		spring-boot-starter-data-redis
	
	
	
	
	    org.apache.commons
	    commons-pool2
	    2.6.0
	
	
	
	
	    javax.servlet
	    javax.servlet-api
	    3.1.0
	    provided
	

第二步:控制层controller类编写
redis的配置和序列化的代码参考上篇博文SpringBoot 2.0 学习(九)集成redis缓存技术

@Controller
public class MainController {
	private static final String STR_SESSION_KEY = "name";

    @GetMapping("/")
    public String index() {
        return "index";
    }

    @PostMapping("/setSession")
    @ResponseBody
    public  Map setSession(String value, HttpServletRequest request) {
        Map map = new HashMap<>();
        request.getSession().setAttribute(STR_SESSION_KEY, value);
        map.put("msg", "ok");
        return map;
    }

    @PostMapping("/getSession")
    @ResponseBody
    public Map getSession(HttpServletRequest request) {
        Map map = new HashMap<>();
        HttpSession session = request.getSession();
        Object value = session.getAttribute(STR_SESSION_KEY);
        map.put("value", value);
        map.put("id", session.getId());
        map.put("port", request.getLocalPort());
        map.put("msg", "ok");
        return map;
    }
}

第三步:前端显示页面





spring boot 2.0——负载均衡与session同步





    

玩转spring boot——负载均衡与session同步

from 皎洁de时光的博客



结果:

属性
session id {{sesssionId}}
session值 {{sesssion}}
本地端口 {{port}}

第四步:配置nginx环境,实现负载均衡,启动redis服务,实现session同步
首先,官网下载nginx版本,我这里用的是1.14.2版本

upstream节点为负载均衡配置
下面指定了两个server实例,对于localhost的8080和8081端口
server节点监听80端口,会跳转到反向代理的名称为协议“http://tomcat”的upstream上
这里的“http://tomcat”,要与upstream设置的名称相同
SpringBoot 2.0 学习(十)Nginx负载均衡与session共享_第3张图片
解压文件里面的nginx.exe可执行文件双击,或者如下操作,则nginx配置成功
在这里插入图片描述

第五步:复制项目,分别命名为demo1和demo2,端口分别为8081和8082

  1. 启动项目,可以先打包成jar包形式,然后在文件目录使用 java -jar 项目包
  2. 直接在开发工具里面运行springboot项目,确保运行正常
  3. 输入网址http:localhost,访问页面,效果如下
    SpringBoot 2.0 学习(十)Nginx负载均衡与session共享_第4张图片
    SpringBoot 2.0 学习(十)Nginx负载均衡与session共享_第5张图片
    点击获取,可以发现本地端口会随机改变,但是session id和session值是不会随之改变的,这就实现了将一台服务器上的压力分给了两台服务器,同时还保证了session值一直,实现数据共享。

文章参考
刘冬的博客

你可能感兴趣的:(Spring,Boot,2.0学习笔记)