springsesson&redis实现session共享
dubbo_parent(父)下
1.创建一个一个dubbo_redis模块
1.配置pom下面展示一些 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">
<parent>
<artifactId>dubbo_parent</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo_redis</artifactId>
<dependencies>
<!-- redis-->
<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>
<!-- spring-session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
</dependencies>
</project>
2.application-redis.yml
下面展示一些 application-redis.yml
。
#配置连接redis的参数,6379是单机版那个先连单机版
spring:
redis:
host: 192.168.159.129
port: 6379
2.创建一个dubbo_cart消费者模块
1.pom和dubbo_manager模块一样,全部拷过来。下面展示一些 dubbo_cart模块pom配置文件
。因为springsession共享也要使用redis故pom也要依赖redis,不然不能获取共享的session
<?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">
<parent>
<artifactId>dubbo_parent</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo_cart</artifactId>
<dependencies>
<!-- 依赖pojo-->
<dependency>
<artifactId>dubbo_pojo</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 依赖api-->
<dependency>
<artifactId>dubbo_api</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 依赖redis-->
<dependency>
<artifactId>dubbo_redis</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jsp解析器 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
2.下面展示一些 dubbo_cart模块application.yml配置
。因为用到了redis也要动态引入redis的application.yml文件关联进来
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
profiles:
active: redis
server:
port: 8083
3.再创一个启动类。下面展示一些 启动类
。启动类也要开启对redis的支持
package com.xiangxue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching //开启对redis的支持
public class CartApp {
public static void main(String[] args) {
SpringApplication.run(CartApp.class,args);
}
}
3.dubbo_manager下做的用户登录,实现不同tomcat端口的session共享
1.因为做单点登录(实现不同端口的session共享,这个manager模块端口的用户数据会写到redis里去,要传到cart模块端口里去显示,)会用到redis故要依赖redis
下面展示一些 dubbo_manager的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">
<parent>
<artifactId>dubbo_parent</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo_manager</artifactId>
<dependencies>
<!--依赖pojo-->
<dependency>
<artifactId>dubbo_pojo</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖api-->
<dependency>
<artifactId>dubbo_api</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖redis-->
<dependency>
<artifactId>dubbo_redis</artifactId>
<groupId>com.xiangxue</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jsp解析器 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
2.也要关联配置文件
下面展示一些 dubbo_manager的application.yml
。
#配置视图解析器
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
#关联application-redis.yml的配置文件
profiles:
active: redis
#配置zookeeper注册中心
dubbo:
application:
name: dubbo_manager
registry:
address: zookeeper://192.168.159.129:2181?backup=192.168.159.129:2182,192.168.159.129:2183 #zookeeper集群
#address: zookeeper://192.168.159.129:2181
protocol:
name: dubbo
#指定服务器启动的端口
server:
port: 8081
3.将实现类里面用户的信息存进redis
下面展示一些 dubbo_manager下的UserServiceImpl
。
package com.xiangxue.service.impl;
import com.xiangxue.pojo.User;
import com.xiangxue.service.UserService;
import com.xiangxue.servicedubbo.UserServiceDubbo;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
/**
*
*/
@Service //这里用spring中的Service注解
public class UserServiceImpl implements UserService {
//通过dubbo从zookeeper注册中心中,取服务
@Reference //从zookeeper里订阅服务
private UserServiceDubbo userServiceDubbo;//这个接口的实现在zookeeper注册中心中
/**
* Cacheable这个注解可以把return的数据作为redis中的value信息存入
* cacheNames : 是指定redis中key的前缀,为了区redis中存储的不同项目的数据
* key: 是存到redis中的key的名字
* 当loginUser方法被调用时,返回值为以com.xiangxue::user为key,user作为值存入redis中,User类必须实现Serializable
*/
@Override
@Cacheable(cacheNames = "com.xiangxue",key = "'user'") //会以key名为: com.xiangxue::user
public User loginUser(User u) {
User user = userServiceDubbo.loginUser(u);
return user;
}
}
4.启动类里还要开启去对redis的支持
4.1启动后linux中的redis
5.usercontroller写这个方法跳到外部链接用这个的
5.1效果:
点击我的购物车要从8081端口跳到8083端口
到
4.获取登录身份信息实现session共享
1.在dubbo_cart消费者模块下
因为前面manager模块存进去了session
查看:
2.在不同的tomcat中实现session共享,启动后从8081端口session共享到8083
点击我的购物车后到:
总结
1.在dubbo_redis模块下配置pom和application-redis.yml文件
2.在dubbo_manage模块8081端口做单点登录,准备跳转到dubbo_cart模块8083端口下还能实现session共享
3.故dubbo_manage模块要依赖redis也要关联redis的配置文件,把要使用的实现类通过这个Cacheable注解,将实现类里面用户的信息存进redis
3.1:启动类里还要开启去对redis支持的注解EnableCaching
3.2:usercontroller写这个方法跳到外部链接,外部端口用这个的
4.dubbo_cart模块要获取登录身份信息;也要使用redis,故pom也要依赖redis并且也要关联redis的配置文件;
4.1然后正常使用 session,因为此时session已经被springsession接管了
4.2启动类也要开启对redis的支持;在不同的tomcat中实现session共享,启动后从8081端口session共享到8083