【springboot】 spring session 分布式会话共享

设计拓扑图

前言

如上图,是一个非常传统的服务端拓扑结构,一个web请求,经过负载均衡的转发,到不同的服务器处理。那么来自同一用户的请求将有可能被负载分发到不同的实例中去,如何保证不同实例间Session共享成为一个不得不解决的问题。 Spring Session作为Spring社区官方推荐的一个比较简单快速的Java Web分布式session解决方案,帮我们搞定了长期以来比较蛋疼的session分布式的问题。

搭建spring boot整合spring session

1. 加入Redis和spring-session的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
</dependency>

2. application配置

spring:
  session:
    store-type: redis

。。。到这里就配置完毕了,如果你的redis 不是默认配置,还要配置一下redis咯,当然spring-session 也支持更多的存储方式,具体参考文档

3. 配置nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    upstream spring-session {
        server 127.0.0.1:8081; 
        server 127.0.0.1:8082; 
        server 127.0.0.1:8083;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://spring-session;
            proxy_set_header Host $host; 
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        }
    }
}

3. 体验一下所谓的分布式会话共享

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8081

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8082

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8083
负载均衡下的session

注意看动图路由到不同服务后SessionID 情况

负载均衡下的session

会发现,无论转发到那个节点处理SessionId 不会变化。

4. 最后来看看Session在Redis里面数据结构

image

配置过程一些坑

配置Nginx的时候,注意要注释ip_hash,不然通一个IP的请求,会被转发到通一个服务里面。

upstream spring-session {
    # ip_hash
    server 127.0.0.1:8081; 
    server 127.0.0.1:8082; 
    server 127.0.0.1:8083;
}

源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,654评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,281评论 6 342
  • 思维导图: 一、为什么需要session共享 HttpSession是由servelet容器进行管理的。而我们常用...
    barry_di阅读 12,876评论 7 39
  • 我有个女儿,3岁,人见人爱,花见花开。这一点呢,像我。她的名字呢,叫浅浅。我首先声明一下,跟前段时间热播的仙侠偶像...
    加小菲再见阅读 623评论 0 1
  • 刚看了《血战钢锯岭》,确实不错,属于战争题材电影的佼佼者。 **战争场面震撼,画面逼真,尤其是对于细节的刻画做到了...
    sherrol阅读 430评论 0 0

友情链接更多精彩内容