• 微服务session数据共享


    微服务之间的数据共享之session

    session域是存储在服务器端的内存中,但是现在使用微服务,各个功能模块之间拆分成不同的服务,每个服务负责某种功能,每个服务都是一个进程,所有每个服务中的内存数据是不共享的,故存储在每个服务中的session对象不可以被所有的微服务共享。

    Session对象,就是客户端浏览器与服务器之间建立的互动信息状态。每一个不同的用户连接将得到不同的Session,也就是说Session与用户之间是一种一对一的关系。Session在用户进入网站时由服务器自动产生,并在用户正常离开站点时释放.,现在项目是微服务项目,有多个服务,每个服务之间的内存是不共享的,所有session存储在某个服务的内存中其他服务是获取不到的。

    session对象:用户访问某个微服务的时候,创建了session对象,为这个对象生成一个唯一的jessionid,这个jessionid是存储在cookie对象中,返回给浏览器端,以后客户端每次给服务器发送请求的时候都会带这个存储jessionid的cookie。服务器端如果使用这个jessionid找到了对应的session,那么就可以直接获取session域中存储的数据,如果服务器端没有找到这个jessionid对应的session,那么服务器端会新创建一个session对象,给这个对象在行创建一个sessionid去存储到cookie中返回给浏览器,这样也就修改了jessionid导致即使他访问原来的服务,由于jessionid修改了也会找不到原来的session数据

    .

    示意图:

                 所以把session存储到内存中这样的方法不适应于微服务,解决方法:把session对象存储到redis中,只要所以的服务绑定同一个redis就可以获取到redis中的存储的session数据。

    实现:导入依赖           

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

    配置redis

     redis:
        host: 192.168.127.128
        port: 6379
        lettuce:
         pool:
          max-active: 20  #最大连接数,负值表示没有限制,默认8
          max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
          max-idle: 8     #最大空闲连接,默认8
          min-idle: 0     #最小空闲连接,默认0

     配置session域:

    session:
        store-type: redis

    配置好上面后,项目中创建的session都存储到redis中 

      demo:使用dateway网关配置了路由转发,使得访问微服务的请求均衡的发到各个服务上,查看各个微服务是不是都可以获取到session中的存储数据。 

    github地址:git@github.com:zhangyang-yu/SessionProject.git                    

  • 相关阅读:
    R因子、聚类
    R语言存储
    JavaScript跨域实现
    大型项目工程代码快速上手指北
    Mac环境MySql初始密码设置
    Entity Framework基础—第六篇(Code First)
    Entity Framework基础—第五篇(Model First两种延迟加载)
    Entity Framework基础—第四篇(Model First)
    Entity Framework基础-第三篇
    Entity Framework基础—第二篇
  • 原文地址:https://www.cnblogs.com/zhangyang4674/p/14249622.html
Copyright © 2020-2023  润新知