繼續SpringSession。今天看怎麼用。
用SpringSession得藉助第三方的力量Nginx和Redis。Nginx負責反向代理用戶請求並對請求進行轉發到不同的機器上,Redis負責存儲session。這裏我只是做個測試而已,所以用windows版本的Nginx和Redis。真實的應該在Linux中或者docker中。
windows版的Nginx構建:
第一步:去官網下載windows版本:官網地址:http://nginx.org/en/download.html 我這裏使用的是1.10.3的版本。
下載完成對應的壓縮包爲: nginx-1.10.3.zip,進行解壓操作!【注:解壓的目錄一定不要含有中文,否則訪問出錯!】
第二步:配置nginx,這裏配置nginx全部使用默認的即可。
注意不要直接雙擊nginx.exe,這樣會導致修改配置後重啓、停止nginx無效,需要手動關閉任務管理器內的所有nginx進程。
在nginx.exe目錄,打開命令行工具,用命令 啓動
1.進入解壓的目標,我的 E:\nginx-1.10.3
2.執行啓動命令 ,有一個一閃而過的效果!
start nginx.exe
啓動以後輸入http://localhost:80去瀏覽器看看,如下圖則啓動成功:
第三步:
第三步:配置nginx中的反向代理:
1.備份nginx.conf一份,然後修改nginx.conf文件
2.修改使用反向代理upstream,進行負責均衡負載
保存配置後保存,接下來我們看一下簡單的一些nginx命令:
windows版的Redis搭建:
https://github.com/MSOpenTech/redis這個鏈接可以下載,但是現在速度很慢很慢。大家可以搜索https://www.jb51.net/softs/541181.html去腳本之家下載.
下載好以後就去解壓,然後進入win+r後可以進入安裝目錄,啓動redis-seriver.exe直接啓動。啓動好了以後如下圖所示:
接下來我們啓動客戶端:測試一下
測試了一下沒啥問題,好了redis沒有問題了。但是這只是一個單機版的。
接下來我們繼續springsession。
用IAEA開始開發:
第一步:創建一個空白的項目。
1:
2:
3:
第二步:配置在application.xml換成application.yml後配置一下配置:
server: port: 8090 spring: application: name: manager profiles: active: dev redis: host: 127.0.0.1 port: 6379
第三步:引入對應的依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.alibaba</groupId> <artifactId>session-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>session-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Spring session --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第四步:編寫測試的Controller
package com.alibaba.comtroller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; @Controller @RequestMapping("/UserController") public class UserController { @RequestMapping("/setUser") public @ResponseBody Map<String,Object> setUser(HttpServletRequest request, HttpServletResponse response) { request.getSession().setAttribute("url", request.getRequestURL()); Map<String,Object> map = new HashMap<>(); map.put("url", request.getRequestURL()); return map; } @RequestMapping("/getUser") public @ResponseBody Map<String,Object> getUser(HttpServletRequest request){ Map<String,Object> map = new HashMap<>(); map.put("sessionId", request.getSession().getId()); map.put("url", request.getSession().getAttribute("url")); map.put("serverName", 8090); return map; } }
第五步:啓動的主類上添加註解
package com.alibaba; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @EnableRedisHttpSession public class SessionDemoApplication { public static void main(String[] args) { SpringApplication.run(SessionDemoApplication.class, args); } }
第六步:複製當前的項目一份出來,但是要把對應的端口號改爲8080,因爲我nginx中監聽的就是8080和8090這兩個端口。將UserController 中的getUser中添加的端口號改爲8080其他的一律不變。
第七步:先啓動redis redis-server.exe
第八步:啓動nginx
這裏說一下nginx需要配置一下:
第九步:啓動兩個項目:
第十步:在瀏覽器中訪問:
先訪問:http://localhost/UserController/setUser
接着改爲:http://localhost/UserController/getUser可以看到獲取到的session和對應的服務。
然後我們不斷的刷新當前頁面:
我們看提下redis中的數據:
以上就是基於SpringSession的分佈式回話管理的簡單案例。這裏用到的第三方回話管理的工具是redis。如果要用到其他的mongdb的話在啓動類上面加上相應的註解就是。下一次我們聊聊用這個sessionId我們能幹嘛。