国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Springboot Session共享實現(xiàn)原理及代碼實例

瀏覽:35日期:2023-05-01 18:57:31

在傳統(tǒng)的單服務架構(gòu)中,一般來說,只有一個服務器,那么不存在 Session

共享問題,但是在分布式/集群項目中,Session 共享則是一個必須面對的問題,先看一個簡單的架構(gòu)圖:

Springboot Session共享實現(xiàn)原理及代碼實例

在這樣的架構(gòu)中,會出現(xiàn)一些單服務中不存在的問題,例如客戶端發(fā)起一個請求,這個請求到達 Nginx 上之后,被Nginx 轉(zhuǎn)發(fā)到 Tomcat A 上,然后在 Tomcat A 上往 session 中保存了一份數(shù)據(jù),下次又來一個請求,這個請求被轉(zhuǎn)發(fā)到 TomcatB 上,此時再去 Session中獲取數(shù)據(jù),發(fā)現(xiàn)沒有之前的數(shù)據(jù)。對于這一類問題的解決,思路很簡單,就是將各個服務之間需要共享的數(shù)據(jù),保存到一個公共的地方(主流方案就是 Redis):

Springboot Session共享實現(xiàn)原理及代碼實例

1 實戰(zhàn)

1.1 創(chuàng)建工程

首先 創(chuàng)建一個 Spring Boot 工程,引入 Web、Spring Session 以及 Redis:

Springboot Session共享實現(xiàn)原理及代碼實例

創(chuàng)建成功之后,pom.xml 文件如下:

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

注意:

這里我使用的 Spring Boot 版本是 2.1.4 ,如果使用當前最新版 Spring Boot2.1.5的話,除了上面這些依賴之外,需要額外添加 Spring Security 依賴(其他操作不受影響,僅僅只是多了一個依賴,當然也多了 Spring Security 的一些默認認證流程)。

1.2 配置 Redis

spring.redis.host=192.168.66.128spring.redis.port=6379spring.redis.password=123spring.redis.database=0

1.3 使用

配置完成后 ,就可以使用 Spring Session 了,其實就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,框架已經(jīng)自動幫你完成了:

@RestControllerpublic class HelloController { @Value('${server.port}') Integer port; @GetMapping('/set') public String set(HttpSession session) { session.setAttribute('user', 'javaboy'); return String.valueOf(port); } @GetMapping('/get') public String get(HttpSession session) { return session.getAttribute('user') + ':' + port; }}

考慮到一會 Spring Boot 將以集群的方式啟動 ,為了獲取每一個請求到底是哪一個 Spring Boot 提供的服務,需要在每次請求時返回當前服務的端口號,因此這里我注入了 server.port 。

接下來 ,項目打包:

Springboot Session共享實現(xiàn)原理及代碼實例

打包之后,啟動項目的兩個實例:

java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8080java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8081

然后先訪問 localhost:8080/set 向 8080 這個服務的 Session 中保存一個變量,訪問完成后,數(shù)據(jù)就已經(jīng)自動同步到 Redis 中 了 :

Springboot Session共享實現(xiàn)原理及代碼實例

然后,再調(diào)用 localhost:8081/get 接口,就可以獲取到 8080 服務的 session 中的數(shù)據(jù):

Springboot Session共享實現(xiàn)原理及代碼實例

此時關于 session 共享的配置就已經(jīng)全部完成了,session 共享的效果我們已經(jīng)看到了,但是每次訪問都是我自己手動切換服務實例,因此,接下來我們來引入 Nginx ,實現(xiàn)服務實例自動切換。

1.4 引入 Nginx

很簡單,進入 Nginx 的安裝目錄的 conf 目錄下(默認是在 /usr/local/nginx/conf),編輯 nginx.conf 文件:

Springboot Session共享實現(xiàn)原理及代碼實例

在這段配置中:

upstream 表示配置上游服務器 javaboy.org 表示服務器集群的名字,這個可以隨意取名字 upstream 里邊配置的是一個個的單獨服務 weight 表示服務的權重,意味者將有多少比例的請求從 Nginx 上轉(zhuǎn)發(fā)到該服務上 location 中的 proxy_pass 表示請求轉(zhuǎn)發(fā)的地址,/ 表示攔截到所有的請求,轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)到剛剛配置好的服務集群中 proxy_redirect 表示設置當發(fā)生重定向請求時,nginx 自動修正響應頭數(shù)據(jù)(默認是 Tomcat 返回重定向,此時重定向的地址是 Tomcat 的地址,我們需要將之修改使之成為 Nginx 的地址)。

配置完成后,將本地的 Spring Boot 打包好的 jar 上傳到 Linux ,然后在 Linux 上分別啟動兩個 Spring Boot 實例:

nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8080 & nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8081 &

其中

nohup 表示當終端關閉時,Spring Boot 不要停止運行 & 表示讓 Spring Boot 在后臺啟動

配置完成后,重啟 Nginx:

/usr/local/nginx/sbin/nginx -s reload

Nginx 啟動成功后,我們首先手動清除 Redis 上的數(shù)據(jù),然后訪問 192.168.66.128/set 表示向 session 中保存數(shù)據(jù),這個請求首先會到達 Nginx 上,再由 Nginx 轉(zhuǎn)發(fā)給某一個 Spring Boot 實例:

Springboot Session共享實現(xiàn)原理及代碼實例

如上,表示端口為 8081 的 Spring Boot 處理了這個 /set 請求,再訪問 /get 請求:

Springboot Session共享實現(xiàn)原理及代碼實例

可以看到,/get 請求是被端口為 8080 的服務所處理的。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關文章:
主站蜘蛛池模板: 国产精品自拍在线观看 | 亚洲精品欧美 | 亚洲精品一区二区三区五区 | cekc欧美 | 欧美激情 自拍 | 成人男女网18免费0 成人男女网18免费看 | 国产成人精品视频播放 | 一级一片在线播放在线观看 | 亚洲欧美日韩另类精品一区二区三区 | 欧美另类videosbestsex视频 | 成人一级 | 一级特级欧美a毛片免费 | 国产dvd毛片在线视频 | 日本精品一区二区三区在线视频 | 黄色美女视频免费看 | 久久精品国产精品亚洲精品 | mm在线精品视频 | 亚洲精品成人一区二区www | 激情丝袜美女视频二区 | 欧美在线视 | 国产精品一区高清在线观看 | 免费国产高清精品一区在线 | 那里有黄色网址 | 99久久精品国产自免费 | 国产欧美一区二区精品性色 | 美国毛片基地a级e片 | 国产一区二区在线视频 | 欧美成人午夜在线全部免费 | 欧美一级级a在线观看 | 国产亚洲精品久久麻豆 | 色老头老太做爰视频在线观看 | 亚洲自拍小视频 | 一级毛片在线播放免费 | 国内自拍第一页 | 九九九九在线视频播放 | 国产欧美日韩在线 | 在线亚洲综合 | 香港全黄一级毛片在线播放 | 欧美亚洲国产成人高清在线 | 成人影院免费看 | 成年女人在线观看片免费视频 |