分布式系统中,session共享方案长借助于数据库,将session存放于数据库中,多个应用客户端共连一个数据库,以此达到session共享的方案。数据库中,redis在session共享中通常作为第一选择,spring框架提供了一个集成httpsession和redis的解决方案,这篇文章,就展示spring-session和redis共享session的示例。
工程组件说明
- servicecenter 服务注册中心
- zuul 网关
- UserManagerA 用户服务A
- UserManagerB 用户服务B
- BuyManager 购买服务
其中,servicecenter单纯做注册中心,zuul做网关路由功能。UserManagerA 和 UserManagerB作为用户服务两台应用服务,BuyManager作为一个购买服务。
用户登录session处理在UserManagerA 和 UserManagerB 服务中,在任意一台服务创建session会话后,在另外一台服务中都可以看到。BuyManager作为另外的一台服务,将展示同一个redis服务中的不同应用可以共享到session信息。
工程代码示例
pom文件
使用spring-session redis方案时,引用的jar支持
<!--redis的依赖-->
<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>
其余各项目依赖,根据项目须要引入。
servicecenter
注册中心无其它代码内容,仅一个注册中心配置项文件,设置注册中心地址 localhost:8761
server:
port: 8761 #服务注册中心端口号
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false #是否向服务注册中心注册自己
fetchRegistry: false #是否检索服务
serviceUrl: #服务注册中心的配置内容,指定服务注册中心位置
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
zuul
网关做路由分发功能
设置网关端口号5000,设置注册中心地址。设置路由分发策略,将/um开头服务分发到um服务实例;将/bm开头服务分发到bm服务实例。
# 服务注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
# 设置程序端口号为5000,服务名为zuul-service
server.port=5000