當前位置:
首頁 > 知識 > Tomcat集群實現Session共享

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

RPC框架的原理
Discuz API JSON 適用於IOS及Android移動端開發

TAG:程序員小新人學習 |