memcached实现多个tomcat 共享一个session

       之前公司有个项目要做成前后端分离,即:后端、前端各为一个独立的项目,分别部署在不同的服务器上(由于项目比较小,我们就用了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,发现是一样的,说明成功了:

 

 

猜你喜欢

转载自dqm926.iteye.com/blog/1851711