微服务SpringSession解析部署使用全流程
目录
1、SpringSession简介
2、实现session共享的三种方式
1、修改Tomcat配置文件
2、Nginx负载均衡策略
3、redis统一存储
0、准备工作
1、本地服务添加依赖
2、修改本地服务配置文件
3、添加application.properties文件
4、添加nacos - redis配置
5、修改本地项目bootstrap.yml文件
6、开启SpringSession
7、子域名共享session
8、测试
1、SpringSession简介
是SpringCloud下管理session的框架,在微服务架构中,由于应用了分布式的思想,session无法做到内存中互通,需要一个框架来实现各个微服务中session数据共享,SpringSession解决了这个问题。
在SpringSession框架中,可以无感的实现和操作session共享。
2、实现session共享的三种方式
1、修改Tomcat配置文件
可以通过修改配置文件实现session共享,现在已经不用这种方式了,有很多限制。
2、Nginx负载均衡策略
通过ip_hash的方式,让同一个ip的请求到相同的服务中,session自然没有失效。这种方式也不推荐,无法做到效率及硬件利用率最高的负载均衡。
upstream server{
ip_hash;
server 192.168.1.101:28080 max_fails=1 fail_timeout=60s weight=1;
server 192.168.1.101:28090 max_fails=1 fail_timeout=60s weight=2;
}server {
listen 80;
server_name 192.168.1.115;location / {
proxy_pass server
}
}
3、redis统一存储
SpringBoot整合SpringSession,通过nacos进行配置管理,通过redis存储方式实现session共享
官网文档:Spring Session - Spring Boot
0、准备工作
【1.启动redis,nacos】
【2.准备两个项目应用,编写两份一样的代码】
【2.1添加pom.xml依赖】
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version><spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>
【2.2添加修改项目控制器】
import lombok.Setter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RestController
@RequestMapping("/user")
@Setter
public class UserController {@GetMappingpublic String test(HttpSession session){return session.getId();}
}
【2.3修改项目端口号】
【这里只取一个就可以】后面还会新建一个项目
#在application.yml文件里:
server:port: 67------------------------
server:port: 68
【2.4创建启动类】
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class);}
}
【2.5启动,访问两个项目】
=====此时,两个项目的sessionID不一致。
1、本地服务添加依赖
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、修改本地服务配置文件
spring:session:store-type: redis
3、添加application.properties文件
spring.application.name=sessiondemo
4、添加nacos - redis配置
详细流程可观看如下链接 3.配置中心 下的【5、创建命名空间】
微服务nacos解析部署使用全流程
登录此网址http://192.168.146.128:8848/nacos/#/login 用自己的ip
5、修改本地项目bootstrap.yml文件
#server-addr: 192.168.146.128:8848 端口号和虚拟机端口
spring:cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:server-addr: 192.168.146.128:8848file-extension: yamlnamespace: e3b50403-a164-48e3-b6d3-d060277c1e62shared-configs:- data-id: session.yamlgroup: DEFAULT_GROUPinetutils:preferred-networks: 192.168.146
两个项目的bootstrap.yml文件相同
【注意这张图时告诉每个位置放什么】 图片并非本项目
server-addr:nacos服务ip及端口
file-extension:配置文件类型
namespace:命名空间,在nacos页面中创建,用来管理配置文件
shared-configs:配置中心配置
data-id:配置文件唯一标识
group:配置文件分组
preferred-networks:设置微服务的网段
6、开启SpringSession
@EnableRedisHttpSession
7、子域名共享session
需要创建一个config目录,新建SessionConfig配置类,修改domain作用域
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;/*** @author szsw* @date 2023/2/16 19:22:06*/
@Configuration
public class SessionConfig {@Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer serializer = new DefaultCookieSerializer();serializer.setCookieName("JSESSIONID");serializer.setCookiePath("/");serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");return serializer;}@Beanpublic RedisSerializer<Object> redisSerializer() {return new GenericJackson2JsonRedisSerializer();}}
8、测试
重启一下两个服务,之后访问一下nacos。
两个id相同实现共享
相关文章:
微服务SpringSession解析部署使用全流程
目录 1、SpringSession简介 2、实现session共享的三种方式 1、修改Tomcat配置文件 2、Nginx负载均衡策略 3、redis统一存储 0、准备工作 1、本地服务添加依赖 2、修改本地服务配置文件 3、添加application.properties文件 4、添加nacos - redis配置 5、修改本地项目…...
自动驾驶 3DGS 学习笔记
目录 street_gaussians gsplat依赖项 运行报错: python>3.9 SGD: Street View Synthesis with Gaussian Splatting and Diffusion Prior 差分高斯光栅化 diff-gaussian-rasterization street_gaussians https://github.com/zju3dv/street_gaussians gsp…...
【C++笔试强训】如何成为算法糕手Day5
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…...
【Qt】无IDE的Gui程序快速开始
Qt安装 在 Windows 上安装 Qt 的步骤如下: 下载 Qt 安装程序 访问 Qt 的官方网站:Qt Downloads。点击“Download”按钮,下载 Qt Online Installer(在线安装程序)。 运行安装程序 双击下载的 QtInstaller.exe 文件…...
Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
linux常用命令汇编(持续更新)
一、用户提示符 # root账号提示符 $ 普通用户提示符 二、关闭计算机 shutdown(安全有序地关闭计算机) 语法:shutdown [options] [time] [message] shutdown -h now #立即关机(--halt/终止) shutdown -r now #重…...
AI面试指南:AI工具总结评测,助力求职季
AI面试指南:AI工具总结评测,助力求职季 摘要: 在竞争激烈的AI领域秋招季,准备充分并借助高效工具是提升面试通过率的关键。本文主要介绍一些针对秋招的AI面试工具和学习资源,分为简历优化、面试助手、手撕代码练习三个…...
大二考核题解
大二考核题解 题号题目考察知识点A有意思的监考二分答案B海绵宝宝的数独DFSC走楼梯递推D碱基配对kmpE好简单的题啊,写它!最短路 写在前面: 整体难度不大,代码能力需要一些,正常来说至少要会3题以上 A 有意思的监考 …...
深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保…...
MQ高级:RabbitMQ小细节
在之前的学习中,我们只介绍了消息的发送,但是没有考虑到异常的情况,今天我们就介绍一些异常情况,和细节的部分。 目录 生产者可靠性 生产者重连 生产者确认 MQ可靠性 持久化 Lazy Queue 消费者可靠性 消费者确认机制 失…...
期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响
VIX指数——全称为芝加哥期权交易所市场波动率指数,俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升,预期未来市场波动性会增加。VIX指数下降,预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…...
内存对齐的原理和使用
1. 什么是内存对齐? 内存对齐是指将数据存储在内存中时,按照数据类型的大小,将数据放在特定的内存边界上。例如,4 字节的 int 通常放在能够被 4 整除的地址上,8 字节的 double 则放在能被 8 整除的地址上。 2. 为什么…...
搭建企业级私有仓库harbor
华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…...
互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
李宏毅机器学习2022-HW8-Anomaly Detection
文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…...
用户体验分享 | YashanDB V23.2.3安装部署
近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…...
【漏洞复现】泛微OA E-Office /E-mobile/App/init.php 任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...
SpringCloudEureka实战:搭建EurekaServer
1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…...
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…...
深度解析:Python蓝桥杯青少组精英赛道与高端题型概览
目录 一、蓝桥杯青少组简介二、赛项组别与年龄范围三、比赛内容与题型1. 基础知识范围2. 题型设置2.1 选择题2.2 编程题 3. 考试时长 四、奖项设置与激励措施五、总结 一、蓝桥杯青少组简介 蓝桥杯全国软件和信息技术专业人才大赛(简称“蓝桥杯”)是由工…...
如何使用SCCMSecrets识别SCCM策略中潜在的安全问题
关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具,该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行,并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外,它还将…...
Qt 信号重载问题--使用lambda表达式--解决方法
在connect()中,使用lambda表达式时遇到信号重载,无法识别使用哪个参数时,可通过以下方法处理: 1. 使用QOverload: Qt5.7才有 connect(comboBox,QOverload<int>::of(&QComboBox::currentIndexChanged), [](int index)…...
并行编程实战——TBB框架的应用之一Supra的基础
一、TBB的应用 在前面分析了TBB框架的各种基本知识和相关的基础应用。这些基础的应用很容易通过学习文档或相关的代码来较为轻松的掌握。为了能够更好的理解TBB框架的优势,这里从一个开源的应用程序来分析一下TBB在其中的更高一层的抽象应用,以方便开发…...
std::vector
std::vector是C标准库中一个非常强大的容器类,它提供了动态数组的功能。std::vector可以自动调整大小,提供了随机访问的能力,同时还支持在序列的尾部高效地添加和删除元素。 当创建一个空的std::vector对象时,它不分配任何内存&a…...
Java Web 之 Cookie 详解
在 JavaWeb 开发中,Cookie 就像网站给浏览器贴的小纸条,用于记录一些用户信息或状态,方便下次访问时识别用户身份或进行个性化服务。 也可以这么理解: 场景一:想象一下,你去一家咖啡店,店员认…...
linux系统下让.py文件开机自启动
一 创建服务文件 1、打开终端 2、切换到root用户 sudo su3、创建一个新的systemd服务文件 nano /etc/systemd/system/total_test0619.service 4、在服务文件中添加以下内容 [Unit] DescriptionRun total_test0619.py at startup[Service] Typesimple ExecStart/usr/bin/n…...
linux远程桌面:xrdp 安装失败
window 如何远程 Linux 桌面 安装xrdp yum install xrdpsystemctl start xrdp 如果找不到软件包,就安装epel源,最好改成国内镜像的 在 /etc/yum.repos.d/ 下创建epel.repo,内容如下 [epel] nameExtra Packages for Enterprise Linux 7 - $basearch …...
9.30Python基础-元组(补充)、字典、集合
Python元组(tuple)补充 1、元组的不可变性 元组(tuple)是Python中的一种内置数据类型,用于存储不可变的序列。虽然元组本身不可变,但元组内的元素如果是可变对象(如列表)ÿ…...
桥接模式和NET模式的区别
桥接模式和NET模式的区别 NAT模式: NAT:网络地址转换(模式):借助宿主机来上网,没桥接那么麻烦,只用配置DNS即可。 缺点:扎根于宿主机,不能和局域网内其它真实的主机进行…...
Pigar:Python 项目的依赖管理利器
🌟 引言 在Python项目开发过程中,依赖管理是一个不可忽视的环节。一个精确且易于维护的requirements.txt文件对于项目的部署和协作至关重要。今天,我们将介绍一款名为Pigar的自动生成requirements.txt文件的依赖管理工具,它通过一…...
php网站建设案例教程/河南网站优化公司哪家好
自动关联包含两种机制: 一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如…...
联谊会总结网站建设对外宣传/国内新闻热点事件
坚持、冷静、忍耐 转载于:https://www.cnblogs.com/whxleem/archive/2005/05/16/156489.html...
自学做网站的/网页搭建
返璞归真,代码规范也是一门艺术 黄金定律 永远遵循同一套编码规范 -- 可以是这里列出的,也可以是你自己总结的。如果你发现本规范中有任何错误,敬请指正。通过open an issue on GitHub为本规范添加或贡献内容。 不管有多少人共同参与同一项目…...
咨询网站 模板/环球网
在上次的分享中,介绍了模型建立与使用梯度下降法优化参数、梯度校验,以及一些超参数的经验。 本节课的主要内容: 1链式法则 2深度学习框架中链式法则 3全连接神经网络 1、链式法则 目前我们所处的阶段: 学习了SVM softmax两个模型…...
游戏咨询网站建设目标是什么/百度竞价推广是什么
在*NIX系统遭受***后,确定损失及***者的***源地址相当重要。虽然在大多数***者懂得使用曾被他们攻陷的机器作为跳板来***你的服务器可在他们发动正式***前所做的目标信息收集工作(试探性扫描)常常是从他们的工作机开始的,本篇介绍…...
中小企业网站建设价格/全网营销整合推广
近日,微软的EF团队发布了一个针对SQL Server的Sample Database Provider Entity Framework 5,支持EF的一些新特性。 这个新的Sample Provider支持如下EF 5的新特性: Spatial typesTable Valued Functions带有多个结果集的存储过程然而&#x…...