环境配置

spring boot 2.6.3
spring cloud 2021.0.1
spring cloud alibaba 2021.0.1.0
nacos server 2.0.4
dubbo 2.7.15

解决方案

源代码:https://gitee.com/myzstu/auth

package club.zstuca.myzstu.auth.service.impl;import club.zstuca.myzstu.session.service.ISessionService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.session.FindByIndexNameSessionRepository;
import org.springframework.session.Session;
import org.springframework.stereotype.Service;import java.time.Duration;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*** @author shentuzhigang* @date 2022/3/17 22:59*/
@Service
@DubboService(application = "auth", version = "1.0.0", protocol = "jackson")
public class SessionServiceImpl implements ISessionService {private final FindByIndexNameSessionRepository<? extends Session> sessionRepository;public SessionServiceImpl(FindByIndexNameSessionRepository<? extends Session> sessionRepository) {this.sessionRepository = sessionRepository;}@Overridepublic String createSession() {Session session = sessionRepository.createSession();return session.getId();}@Overridepublic void save(String session) {}@Overridepublic String findById(String id) {Session session = sessionRepository.findById(id);if(session == null){return null;}return session.getId();}@Overridepublic void deleteById(String id) {sessionRepository.deleteById(id);}@Overridepublic Map<String, String> findByIndexNameAndIndexValue(String indexName, String indexValue) {Map<String, ? extends Session> sessionMap = sessionRepository.findByIndexNameAndIndexValue(indexName, indexValue);Map<String, String> map = new HashMap<>();sessionMap.forEach((key, value) -> {map.put(key, value.getId());});return map;}@Overridepublic String changeSessionId(String id) {Session session = sessionRepository.findById(id);return session.changeSessionId();}@Overridepublic <T> T getAttribute(String id, String attributeName) {Session session = sessionRepository.findById(id);return session.getAttribute(attributeName);}@Overridepublic Set<String> getAttributeNames(String id) {Session session = sessionRepository.findById(id);return session.getAttributeNames();}@Overridepublic void setAttribute(String id, String attributeName, Object attributeValue) {Session session = sessionRepository.findById(id);session.setAttribute(attributeName, attributeValue);}@Overridepublic void removeAttribute(String id, String attributeName) {Session session = sessionRepository.findById(id);session.removeAttribute(attributeName);}@Overridepublic Instant getCreationTime(String id) {Session session = sessionRepository.findById(id);return session.getCreationTime();}@Overridepublic void setLastAccessedTime(String id, Instant lastAccessedTime) {Session session = sessionRepository.findById(id);session.setLastAccessedTime(lastAccessedTime);}@Overridepublic Instant getLastAccessedTime(String id) {Session session = sessionRepository.findById(id);return session.getLastAccessedTime();}@Overridepublic void setMaxInactiveInterval(String id, Duration interval) {Session session = sessionRepository.findById(id);session.setMaxInactiveInterval(interval);}@Overridepublic Duration getMaxInactiveInterval(String id) {Session session = sessionRepository.findById(id);return session.getMaxInactiveInterval();}@Overridepublic boolean isExpired(String id) {Session session = sessionRepository.findById(id);return session.isExpired();}
}
package club.zstuca.myzstu.session;import club.zstuca.myzstu.session.service.ISessionService;
import org.springframework.session.FindByIndexNameSessionRepository;
import org.springframework.session.Session;
import org.springframework.session.SessionRepository;import java.io.Serializable;
import java.time.Duration;
import java.time.Instant;
import java.util.Map;
import java.util.Set;/*** @author shentuzhigang* @date 2022/3/19 13:00*/
public class RpcIndexedSessionRepository implements FindByIndexNameSessionRepository<RpcIndexedSessionRepository.RpcSession> {private final ISessionService iSessionService;public RpcIndexedSessionRepository(ISessionService iSessionService) {this.iSessionService = iSessionService;}@Overridepublic Map<String, RpcSession> findByIndexNameAndIndexValue(String indexName, String indexValue) {return findByIndexNameAndIndexValue(indexName, indexValue);}@Overridepublic RpcSession createSession() {return new RpcSession(iSessionService.createSession());}@Overridepublic void save(RpcSession session) {iSessionService.save(session.getId());}@Overridepublic RpcSession findById(String id) {String sessionId = iSessionService.findById(id);if (sessionId == null) {return null;}return new RpcSession(sessionId);}@Overridepublic void deleteById(String id) {iSessionService.deleteById(id);}/*** An internal {@link Session} implementation used by this {@link SessionRepository}.*/public final class RpcSession implements Session, Serializable {private static final long serialVersionUID = 1L;private String id;public RpcSession(String id) {this.id = id;}@Overridepublic String getId() {return this.id;}@Overridepublic String changeSessionId() {return RpcIndexedSessionRepository.this.iSessionService.changeSessionId(this.id);}@Overridepublic <T> T getAttribute(String attributeName) {return RpcIndexedSessionRepository.this.iSessionService.getAttribute(this.id, attributeName);}@Overridepublic Set<String> getAttributeNames() {return RpcIndexedSessionRepository.this.iSessionService.getAttributeNames(this.id);}@Overridepublic void setAttribute(String attributeName, Object attributeValue) {RpcIndexedSessionRepository.this.iSessionService.setAttribute(this.id, attributeName, attributeValue);}@Overridepublic void removeAttribute(String attributeName) {RpcIndexedSessionRepository.this.iSessionService.removeAttribute(this.id, attributeName);}@Overridepublic Instant getCreationTime() {return RpcIndexedSessionRepository.this.iSessionService.getCreationTime(this.id);}@Overridepublic void setLastAccessedTime(Instant lastAccessedTime) {RpcIndexedSessionRepository.this.iSessionService.setLastAccessedTime(this.id, lastAccessedTime);}@Overridepublic Instant getLastAccessedTime() {return RpcIndexedSessionRepository.this.iSessionService.getLastAccessedTime(this.id);}@Overridepublic void setMaxInactiveInterval(Duration interval) {RpcIndexedSessionRepository.this.iSessionService.setMaxInactiveInterval(this.id, interval);}@Overridepublic Duration getMaxInactiveInterval() {return RpcIndexedSessionRepository.this.iSessionService.getMaxInactiveInterval(this.id);}@Overridepublic boolean isExpired() {return RpcIndexedSessionRepository.this.iSessionService.isExpired(this.id);}}
}

参考文章

  • Dubbo——Dubbo协议整合Jackson序列化解决方案

Spring Cloud——基于Dubbo的分布式Session解决方案相关推荐

  1. spring cloud学习进阶篇:Spring Cloud Sleuth + Zipkin 实现分布式跟踪解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 简述 使用 spring cloud 用到最多的是各种rest服务调用,Twitter的Zipkin 是一种实现分布式跟踪解决 ...

  2. Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合

    https://www.cnblogs.com/babycomeon/p/11546737.html Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合 ...

  3. Dubbo的疑难解答:Spring Cloud Alibaba系列之分布式服务组件

    1.分布式理论 1.1.分布式基本定义 <分布式系统原理与范型>定义: "分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统" 分布式系统(dis ...

  4. 微服务架构的基础框架选择:Spring Cloud还是Dubbo?

    最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构.近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理Spr ...

  5. 《springcloud超级入门》Spring Cloud和Dubbo的区别及各自的优缺点《三》

    了解为什么需要微服务.最初的服务化解决方案是给相同服务提供一个统一的域名,然后服务调用者向这个域发送 HTTP 请求,由 Nginx 负责请求的分发和跳转. 这种架构存在很多问题:Nginx 作为中间 ...

  6. spring cloud 和 dubbo 各自的优缺点

    两者都是现在主流的微服务框架,但却存在不少差异: 初始定位不同: SpringCloud定位为微服务架构下的一站式解决方案:Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理 生态 ...

  7. 微服务选择Spring Cloud还是Dubbo?

    点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 ​参与文末话题讨论,每日赠送异步图书. --异步小编 在阿里巴巴的生态中,微服务逐渐成为主要的服务形态,伴随着容器化的日臻成熟 ...

  8. Spring Cloud与Dubbo优缺点(面试题)

    Spring Cloud与Dubbo优缺点 Dubbo由于是二进制的传输,占用带宽会更少.Spring Cloud 是 HTTP 协议传输,带宽占用会比较多,同时使用 HTTP 协议一般会使用 JSO ...

  9. 【Spring Cloud】03_SpringCloud Alibaba 微服务解决方案

    微服务简介 背景分析 讲微服务之前,我们先分析以下单体应用.所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,spring,mybatis框架进行整 ...

最新文章

  1. CompletableFuture:让你的代码免受阻塞之苦
  2. [9.28模拟] good
  3. #iOS问题记录#WKWebView 闪退异常
  4. oracle账户锁定解决方法
  5. Halcon算子:min_max_gray和gray_histo的区别
  6. 关于SVN Server自助修改密码详细教程
  7. rsync 常用命令及格式
  8. sim插拔识别时间_特斯拉+树莓派实现车牌识别检测系统
  9. SQL Server 调优系列基础篇 - 子查询运算总结
  10. 是否允许此网站打开你计算机上的程序
  11. Opencv3.4.2调用yolov2进行物体检测源代码
  12. IIS7的HTTP 500.19错误
  13. c++ opencv4.5.0 头文件_简单的C程序分析(first.c程序)
  14. 广数系统加工中心编程_数控加工中心编程技巧一文通
  15. linux windows凤凰,凤凰系统率先升级内核到Linux4.9,支持更多新硬件
  16. php是什么电器元件,常见电子元件识别
  17. 【论文阅读】显著性检测 EGNet
  18. echarts制作中国地图
  19. 十分钟搞定时间复杂度(算法的时间复杂度)
  20. python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息

热门文章

  1. JAVA I/O操作那些事之标准I/0
  2. C语言18个经典问题答录
  3. 如何自学JSP。--摘抄http://hi.baidu.com/comasp
  4. [转载]ASP.NET开发经验积累
  5. 看来美国的霸道不仅仅是针对Lenovo的,SONY也被威胁--索尼被判侵犯专利,PlayStation游戏机销售面临威胁【ZZ】...
  6. MATLAB已知坐标均匀取电,基于MATLAB带钢卷取电液伺服控制系统的分析(word文档良心出品)(11页)-原创力文档...
  7. c语言单片机4*4键盘程序,求51单片机矩阵4*4键盘程序,P0口接一个数码管,P3口接矩阵键盘,C语言的...
  8. android头部固定悬停,Android开发上滑悬停且头部可刷新
  9. matlab图像相加例子,MATLAB图像处理例子
  10. python 重载id函数_Python函数重载实例