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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程是一门具有很强实践性质的“项目实战”课程,即“企业中台系统实战”,其中主要包含三大块核心内容,如下图所示(右键可以在新标签页中打开图片放大查看): 即主要包含以下三大块内容: ① 企业内部应用系统菜单资源和操作权限的统一管理; ② 分布式应用系统通信时的统一授权,即基于AccessToken的授权与认证; ③ 分布式服务/系统通信时的两大方式(基于dubbo rpc协议和基于http协议的restful api实战)。   值得一提的是,这套中台系统由于讲解了如何统一管理企业内部各大应用系统的“菜单资源列表”、“操作权限”,故而本门课程的“代码实战”是建立在之前debug录制的“企业权限管理平台”这套课程的基础之上的,故而在这里debug建议没有项目开发基础的小伙伴可以先去学习我的那套“企业权限管理平台”的实战课程,之后再来学习我的这套中台系统的实战才不会很吃力(课程链接:)   本课程的课程大纲如下图所示(右键可以在新标签页中打开图片放大查看):   除此之外,这套“中台系统”由于统一管理了企业内部各大应用系统的“菜单资源和操作权限”以及“应用系统之间通信时的统一授权”,故而难免需要涉及到“中台系统”与“中台子系统”、“中台子系统”与“中台子系统”之间的通信(即分布式服务之间的通信),在这里我们是采用“dubbo + zookeeper”的方式加以落地实现的,详情如下图所示(右键可以在新标签页中打开图片放大查看):   而众所周知,作为一款知名以及相当流行的分布式服务调度中间件,dubbo现如今已经晋升为Apache顶级的开源项目,未来也仍将成为“分布式系统”开发实战的一大利器,如下图所示为dubbo底层核心系统架构图(右键可以在新标签页中打开图片放大查看): 而在这门“中台系统实战”的课程中,我们也将始终贯彻、落地dubbo的这一核心系统架构图,即如何将中台系统开发的服务注册/发布到注册中心zookeeper,中台子系统如何订阅/消费/调度中台系统发布在zookeeper的接口服务,中台子系统在走http协议调度通信时dubbo如何进行拦截、基于token认证接口的调用者等等,这些内容我们在课程中将一一得到代码层面的实战落地!   下图为本课程中涉及到的分布式系统/服务之间 采用“http协议restfulapi”方式通信时的Token授权、认证的流程图(右键可以在新标签页中打开图片放大查看): 而不夸张地说,基于AccessToken的授权、认证方式在现如今微服务、分布式时代系统与系统在通信期间最为常用的“授权方式”了,可想而知,掌握其中的流程思想是多么的重要!   以下为本门课程的部分截图(右键可以在新标签页中打开图片放大查看):     核心技术列表: 值得一提的是,由于本门课程是一门真正介绍“中台思想”以及将“中台思想”和“分布式系统开发实战”相结合落地的课程,故而在学完本门课程之后,可以掌握到的核心技术自然是相当多的。主要由SpringBoot2.0、SpringMVC、Mybatis、Dubbo、ZooKeeper、Redis、OkHttp3、Guava-Retrying重试机制、JWT(Json Web Token)、Shiro、分布式集群session共享、Lombok、StreamAPI、Dubbo-Filter以及ServiceBean等等。如下图所示(右键可以在新标签页中打开图片放大查看):

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值