日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud——基于Dubbo的分布式Session解决方案

發布時間:2024/10/5 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud——基于Dubbo的分布式Session解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境配置

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解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。