[Session共享]Tomcat集群实现Session共享

来源:互联网 发布:苏小红c语言第三版pdf 编辑:程序博客网 时间:2024/05/17 04:49

前言

实现Session共享的方法有很多种,利用redis、mysql或Tomcat等均可实现Session共享,本次是使用Tomcat实现Session共享。但此方案也有弊端,仅仅作用于Tomcat,以后会继续更新文章,推出其他解决方案。

环境准备
1、两个Tomcat
2、两个项目

首先我们简单配置一下项目,在index.jsp中添加如下测试代码,用来测试服务器间的的Session是否同步。

  <body>        SessionID:<%=session.getId()%>          <BR>          SessionIP:<%=request.getServerName()%>          <BR>          SessionPort:<%=request.getServerPort()%>    </body>

然后我们需要配置Tomcat的server.xml

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

在这段代码下面添加如下代码

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                  channelSendOptions="8">           <Manager className="org.apache.catalina.ha.session.DeltaManager"                    expireSessionsOnShutdown="false"                    notifyListenersOnReplication="true"/>           <Channel className="org.apache.catalina.tribes.group.GroupChannel">             <Membership className="org.apache.catalina.tribes.membership.McastService"                         address="228.0.0.4"                         port="45564"                         frequency="500"                         dropTime="3000"/>             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"                       address="auto"                       port="4000"                       autoBind="100"                       selectorTimeout="5000"                       maxThreads="6"/>             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">             <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>             </Sender>             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>           </Channel>           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"                  filter=""/>           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"                     tempDir="/tmp/war-temp/"                     deployDir="/tmp/war-deploy/"                     watchDir="/tmp/war-listen/"                     watchEnabled="false"/>           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>         </Cluster>  

例如:

<Engine name="Catalina" defaultHost="localhost">    <Cluster>    </Cluster><Engine>

两个Tomcat配置完毕后,我们修改一下两个项目的web.xml,添加

<distributable/>

例如:

<web-app>    <display-name>spring</display-name>    <distributable />    <welcome-file-list>        <welcome-file>index.html</welcome-file>        <welcome-file>index.htm</welcome-file>        <welcome-file>index.jsp</welcome-file>        <welcome-file>default.html</welcome-file>        <welcome-file>default.htm</welcome-file>        <welcome-file>default.jsp</welcome-file>    </welcome-file-list></web-app>

接下来我们启动两个项目测试一下

1

2

至此Session已经实现了Tomcat集群间的共享

原创粉丝点击