微服務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                    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM