之前公司有个项目要做成前后端分离,即:后端、前端各为一个独立的项目,分别部署在不同的服务器上(由于项目比较小,我们就用了tomcat)。前后端通过jsonp的方式进行数据的交互。后端只做业务,前端只做展示。这样的话遇到了一个问题,就是两个系统所部属的服务器不同,那么就会产生两个不同的session,当然这不是我们需要的结果!
这样就要求两个tomcat·共用一个session,网上研究了下,发现可以引用外部缓存(memcached),将session统一放在memcached里面,这样的话,两个tomcat就共用一个session,问题解决了。
下面是我做的一些实验:
1、先做好准备工作:
将要用的的工具找到:memcached.exe、tomcat6
用到的包:memcached-session-manager-1.5.1.jar、memcached-session-manager-tc6-1.5.1.jar、msm-javolution-serializer-1.5.1.jar、javolution-5.5.1.jar、memcached-2.5.jar(全部在附件中,tomcat6网上应该很好找,自己下)
2、安装memcached:
(1)、memcached.exe放在一个路径下(例如:D:\memcached)
(2)、cmd进入到此路径下,执行memcached.exe -d install,即安装memcached服务,完成后再执行memcached.exe -d start,即启动服务,以后memcached将会作为系统的一个服务自动启动。现在去系统服务下看,如果有memcached且已启动,说明安装成功。
3、部署tomcat
这个部署就不用我说了吧,只需解压缩即可。
复制一份,就有了两个服务器。
我这边实验是在一个机器上做的(本来想装个虚拟机的,但是本子太差了,卡死了),所以为了连个tomcat都能跑起来,只能该配置了,把一个tomcat的端口改了:
<Server port="9005" shutdown="SHUTDOWN">:原来是8005
<Connector executor="tomcatThreadPool"
port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> :原来是8080
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />:原来是8009
启动下两个服务器,能一起跑起来,进行下一步。
将上面准备的包全部放在两个tomcat的lib下。
再在context.xml中加上配置:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"/>
红字即:memcached服务的接口,11211为memcached的默认端口,现在装在本地的所以为localhost:11211。
在同时运行下tomcat,成功启动,说明配置没错,现在就进行测试了:
4、测试:
附件中的test即为测试项目。分别部署在两个tomcat下,启动,在同一个浏览器访问两个不同的项目,根据页面显示的sessionID,发现是一样的,说明成功了:
转自https://dqm926.iteye.com/blog/1851711