Tomcat集群实现Session共享

前言

实现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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

  • 1

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

<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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

例如:

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

<Cluster>

</Cluster>

<Engine>

  • 1
  • 2
  • 3
  • 4

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

<distributable/>

  • 1

例如:

<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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

Tomcat集群实现Session共享

Tomcat集群实现Session共享

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

Tomcat集群实现Session共享

相关推荐