當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Cloud——基于Dubbo的分布式Session解决方案
生活随笔
收集整理的這篇文章主要介紹了
Spring Cloud——基于Dubbo的分布式Session解决方案
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
環(huán)境配置
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協(xié)議整合Jackson序列化解決方案
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud——基于Dubbo的分布式Session解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo——Dubbo协议整合Jack
- 下一篇: 基础网络爬虫(Web crawler)相