通常情況下,Tomcat、Jetty等Servlet容器,會(huì)默認(rèn)將Session保存在內(nèi)存中。如果是單個(gè)服務(wù)器實(shí)例的應(yīng)用,將Session保存在服務(wù)器內(nèi)存中是一個(gè)非常好的方案。但是這種方案有一個(gè)缺點(diǎn),就是不利于擴(kuò)展。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、麻栗坡網(wǎng)站維護(hù)、網(wǎng)站推廣。
目前越來(lái)越多的應(yīng)用采用分布式部署,用于實(shí)現(xiàn)高可用性和負(fù)載均衡等。那么問(wèn)題來(lái)了,如果將同一個(gè)應(yīng)用部署在多個(gè)服務(wù)器上通過(guò)負(fù)載均衡對(duì)外提供訪問(wèn),如何實(shí)現(xiàn)Session共享?
實(shí)際上實(shí)現(xiàn)Session共享的方案很多,其中一種常用的就是使用Tomcat、Jetty等服務(wù)器提供的Session共享功能,將Session的內(nèi)容統(tǒng)一存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)(如MySQL)或緩存(如redis)中。
下面我們將在springcloud微服務(wù)項(xiàng)目中,使用redis實(shí)現(xiàn)簡(jiǎn)單高效的session共享。官網(wǎng):www.fhadmin.org
eureka-server:注冊(cè)中心
springcloud-session-redis:業(yè)務(wù)session所在項(xiàng)目
springcloud-session-zuul:路由網(wǎng)關(guān)
新建一個(gè)spring boot項(xiàng)目,命名springcloud-session-redis
pom
<?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> ????<groupId>com.carry</groupId> ????<artifactId>springcloud-session-redis</artifactId> ????<version>0.0.1-SNAPSHOT</version> ????<packaging>jar</packaging> ????<name>springcloud-session-redis</name> ????<description>Demo?project?for?Spring?Boot</description> ????<parent> ????????<groupId>org.springframework.boot</groupId> ????????<artifactId>spring-boot-starter-parent</artifactId> ????????<version>2.0.4.RELEASE</version> ????????<relativePath?/>?<!--?lookup?parent?from?repository?--> ????</parent> ????<properties> ????????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ????????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> ????????<java.version>1.8</java.version> ????????<spring-cloud.version>Finchley.SR1</spring-cloud.version> ????</properties> ????<dependencies> ????????<dependency> ????????????<groupId>org.springframework.boot</groupId> ????????????<artifactId>spring-boot-starter-data-redis</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.session</groupId> ????????????<artifactId>spring-session-data-redis</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.apache.commons</groupId> ????????????<artifactId>commons-pool2</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.boot</groupId> ????????????<artifactId>spring-boot-starter-web</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.cloud</groupId> ????????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.boot</groupId> ????????????<artifactId>spring-boot-starter-actuator</artifactId> ????????</dependency> ????</dependencies> ????<dependencyManagement> ????????<dependencies> ????????????<dependency> ????????????????<groupId>org.springframework.cloud</groupId> ????????????????<artifactId>spring-cloud-dependencies</artifactId> ????????????????<version>${spring-cloud.version}</version> ????????????????<type>pom</type> ????????????????<scope>import</scope> ????????????</dependency> ????????</dependencies> ????</dependencyManagement> ????<build> ????????<plugins> ????????????<plugin> ????????????????<groupId>org.springframework.boot</groupId> ????????????????<artifactId>spring-boot-maven-plugin</artifactId> ????????????</plugin> ????????</plugins> ????</build> </project>
在application.yml中加入redis、eureka、port等配
server: ??port:?8090 spring: ??application: ????name:?service-session-redis ??redis: ????host:?192.168.68.100 ????port:?6379 ????password:?123456 ????timeout:?6000ms ????lettuce: ??????pool: ????????max-active:?8 ????????max-wait:?-1ms ????????max-idle:?8 ????????min-idle:?0 ????database:?0 eureka: ??client: ????serviceUrl: ??????defaultZone:?http://admin:123456@localhost:8761/eureka/ management:? ??endpoints: ????web: ??????exposure:? ????????include:?"*" ??????cors: ????????allowed-origins:?"*" ????????allowed-methods:?"*"
package?com.carry.config; import?org.springframework.context.annotation.Configuration; import?org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration @EnableRedisHttpSession public?class?RedisSessionConfig?{ }
package?com.carry.controller; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpSession; import?org.springframework.cloud.context.config.annotation.RefreshScope; import?org.springframework.util.StringUtils; import?org.springframework.web.bind.annotation.GetMapping; import?org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public?class?UserManagementController?{ ????/** ?????*?redis?sesion共享 ?????*? ?????*?@param?request ?????*?@return ?????*/ ????@GetMapping("/getUser") ????public?String?getUser(HttpServletRequest?request)?{ ????????HttpSession?session?=?request.getSession(); ????????String?username?=?(String)?session.getAttribute("username"); ????????if?(StringUtils.isEmpty(username))?{ ????????????username?=?"testSessionRedis|"?+?System.currentTimeMillis(); ????????????session.setAttribute("username",?username); ????????} ????????System.out.println("訪問(wèn)端口:"?+?request.getServerPort()); ????????return?username; ????} }
新建springboot項(xiàng)目,命名springcloud-session-zuul
<?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> ????<groupId>com.carry</groupId> ????<artifactId>springcloud-session-zuul</artifactId> ????<version>0.0.1-SNAPSHOT</version> ????<packaging>jar</packaging> ????<name>springcloud-session-zuul</name> ????<description>Demo?project?for?Spring?Boot</description> ????<parent> ????????<groupId>org.springframework.boot</groupId> ????????<artifactId>spring-boot-starter-parent</artifactId> ????????<version>2.0.4.RELEASE</version> ????????<relativePath?/>?<!--?lookup?parent?from?repository?--> ????</parent> ????<properties> ????????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ????????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> ????????<java.version>1.8</java.version> ????????<spring-cloud.version>Finchley.SR1</spring-cloud.version> ????</properties> ????<dependencies> ????????<dependency> ????????????<groupId>org.springframework.cloud</groupId> ????????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.cloud</groupId> ????????????<artifactId>spring-cloud-starter-netflix-zuul</artifactId> ????????</dependency> ????</dependencies> ????<dependencyManagement> ????????<dependencies> ????????????<dependency> ????????????????<groupId>org.springframework.cloud</groupId> ????????????????<artifactId>spring-cloud-dependencies</artifactId> ????????????????<version>${spring-cloud.version}</version> ????????????????<type>pom</type> ????????????????<scope>import</scope> ????????????</dependency> ????????</dependencies> ????</dependencyManagement> ????<build> ????????<plugins> ????????????<plugin> ????????????????<groupId>org.springframework.boot</groupId> ????????????????<artifactId>spring-boot-maven-plugin</artifactId> ????????????</plugin> ????????</plugins> ????</build> </project>
server: ??port:?1100 spring: ??application: ????name:?service-session-zuul zuul:? ??ignoredServices:?'*'?#忽略所有未配置的service ??host: ????connect-timeout-millis:?20000 ????socket-timeout-millis:?20000 ??routes: ????redis-session-service:? ??????path:?/user-session/** ??????serviceId:?service-session-redis ??????sensitiveHeaders:?"*"? ribbon:?#ribbon負(fù)載均衡參數(shù)配置 ??ReadTimeout:?5000 ??ConnectTimeout:?5000 eureka: ??client: ????serviceUrl: ??????defaultZone:?http://admin:123456@localhost:8761/eureka/
package?com.carry; import?org.springframework.boot.SpringApplication; import?org.springframework.boot.autoconfigure.SpringBootApplication; import?org.springframework.cloud.netflix.eureka.EnableEurekaClient; import?org.springframework.cloud.netflix.zuul.EnableZuulProxy; @EnableEurekaClient @SpringBootApplication @EnableZuulProxy public?class?SpringcloudSessionZuulApplication?{ ????public?static?void?main(String[]?args)?{ ????????SpringApplication.run(SpringcloudSessionZuulApplication.class,?args); ????} }
當(dāng)前標(biāo)題:SpringCloud分布式Session共享同步
轉(zhuǎn)載來(lái)源:http://bm7419.com/article30/goscso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、用戶(hù)體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)