Tomcat中负载的Session解决办法

Tomcat进行请求的Session解决方式总体来说有三种,

(1)使用Nginx或者Apache反向代理工具进行用户请求的分机器,在Tomcat的Engine中的标签中加入jvmRoute属性,指定对应的负载到这个机器上就可以了,即称为有粘性的Session。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

  Nginx对应原理:nginx_upstream_jvm_route(nginx扩展,推荐使用)

  nginx_upstream_jvm_route是一个nginx的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。

  简单来说,它是基于cookie中的JSESSIONID来决定将请求发送给后端的哪个server,nginx_upstream_jvm_route会在用户第一次请求后端server时,将响应的server标识绑定到cookie中的JSESSIONID中,从而当用户发起下一次请求时,nginx会根据JSESSIONID来决定由哪个后端server来处理。

  还可以使用ip_hash的方式来进行,但是,不推荐这样的方式,所以,总体来说,这个方式是可以进行负载的,也是解决Session问题。

  通常,更推荐大家使用第三方的代理进行Session的分机器方式,这样在高可用方面可能稍微欠缺,但是,如果不是很大的项目情况,不会出现太大的问题。

  配置方式:待后面进行实际亲测后贴出来

  别人配置方式地址:http://www.linuxidc.com/Linux/2013-06/86446.htm (后面将验证改配置是否有效)

  这里也讲了一些价值的东西:http://hanqunfeng.iteye.com/blog/1920994

(2)使用Tomcat自带的功能,进行服务间的Session复制,但是,Session复制可以使用两种方式,修改后全量的复制,还是修改后增量复制,对应的Tomcat的类,DeltaSession(增量)、ReplicatedSession(全量,暂时在Tomcat9源码中未找到),这里的配置还有待添加。即称为无粘性的Session。

  配置方式:待后面进行实际亲测后贴出来

  别人配置方式地址:http://www.cnblogs.com/hanxianlong/p/3456780.html (后面将验证改配置是否有效)

(3)将Tomcat的Session管理分离出来,进行统一管理,将Session放入到Redis或其他缓存中去。

  这里需要去使用代码实现,也可以使用第三方插件实现,名称:tomcat-redis-session-manager 地址:https://github.com/jcoleman/tomcat-redis-session-manager

时间: 2024-07-29 23:53:25

Tomcat中负载的Session解决办法的相关文章

MyEclipse中拷贝J2EE项目,发布到tomcat中名字一样的解决办法

修改Eclipse工作空间下新拷贝项目下.settings文件夹中org.eclipse.wst.common.component的两个属性值. 为新项目名字: <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">    <wb-module deploy-

WCF中的错误及解决办法

一 .    HTTP 无法注册 URL http://+:8000/Users/.进程不具有此命名空间的访问权限今天按照网上的例子开始学习WCF程序,运行的时候却发现出如下问题:HTTP 无法注册 URL http://+:8000/Users/.进程不具有此命名空间的访问权限. 遇到这种问题,先不要慌,看一下错误内容:进程不具备此命名空间的访问权限,说明是访问权限的问题,所以我试着以管理员的身份重新打开了VS,结果就没报这个错 WCF中的错误及解决办法,布布扣,bubuko.com

Windows编程中char*转LPCWSTR解决办法总结

Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法. 1.通过T2W转换宏 char* szStr = "balabala"; CString str = CString(szStr); USES_CONVERSION; LPCWSTR wszClassName = new WCHAR[str.GetLength()+1]; wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)

关于Qt中 中文显示的解决办法

关于Qt中 中文显示的解决办法 在linux平台下,这样显示中文 QLabel *label = new QLabel; QTextCodec *codec = QTextCodec::codecForName("UTF-8"); label->setText(codec->toUnicode("<center><h1>你好</h1></center>"));  label->setWindowTit

&.nbsp;在IE和谷歌浏览器中不兼容的解决办法

直接在html文档中使用 来表示空格,在不同浏览器中的占位大小是不一样的. 为什么呢,因为不同浏览器默认的字体是不一样的,不同字体下的空格表示 占位大小不一致. 这就好办了嘛,我们对 指定使用同样的字体就能让 显示同样的占位了. 经过测试,当指定Times New Roman字体时,各浏览器都支持良好,每4个 显示的占位是一个汉字字符,而使用宋体或黑体则不能达到目的. <span style="font-family:'Times New Roman';">    <

利用反射将IDataReader读取到实体类中效率低下的解决办法

原文:利用反射将IDataReader读取到实体类中效率低下的解决办法 最开始使用反射一个类型的各个属性,对气进行赋值的代码如下: public static List<T> ToList<T>(IDataReader reader) { //实例化一个List<>泛型集合 List<T> DataList = new List<T>(); PropertyInfo[] properties = typeof(T).GetProperties()

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法: 1.首先打开cmd命令 查看本地TNSPING配置 是否ok?然后找到 Oracle 安装文件 中 listener.ora文件与tnsnames.ora文件:  路径:E:\app\当前系统的账户名\product\11.2.0\dbhome_1\NETWORK\ADMIN 有下图所示就表示 TNSPING配置 是ok的 ? “orcl 是tnsnames.ora文件下面图中所示” ? 2.查看网络连接  tel

启动Tomcat时的常见问题及解决办法

问题一:环境变量 1.检查jdk 验证jdk的配置,在运行-cmd中输入 java -version 即表示安装成功. 如果jdk没有问题,还需要配置两个环境变量.找到jdk和jre的路径,配置JAVA_HOME和JRE_HOME,变量值为jdk的安装路径. JAVA_HOME D:\Program Files (x86)\Java\jdk1.6.0_10 JRE_HOME C:\Program Files (x86)\Java\jre6 如果不清楚是否配置成功,可使用命令来检查.如下图,提示J

eclipse导入web项目之后项目中出现小红叉解决办法

项目中有小红叉我遇到的最常见的情况: 1.项目代码本身有问题.(这个就不说了,解决错误就OK) 2.项目中的jar包丢失.(有时候eclipse打开时会出现jar包丢失的情况,关闭eclipse重新打开或者重新引入jar包就OK) 3.从外部导入的项目,项目中引用jar包的位置不对,这个在“项目右键>Bulid Path>configure Build Path>Libraries”中调整包的位置就OK. 这些都是常见的,今天要说一下下面这一种: 问题产生场景:从外部导入一个项目,前面三