Tomcat伺服器叢集Session共享
新增session共享
這個是接上一篇文章的,不清楚的可以看這裡:
實現session共享的方式比較的簡單,就是在tomcat所部署的專案TestTomcat中,修改web.xml,在其中加入下面的資訊:
<distributable/>
在Tomcat中也需要進行修改,開啟conf/server.xml配置檔案,在其中的Engine標籤下新增下面的資訊,該資訊無需修改,直接拿來使用就行了。
<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.ClusterSessionListener"/>
</Cluster>
對於該新增方式,在Tomcat的官方文件中就有相應的描述,我們只需要拿來使用就行了,索性的是,由於該官方文件就在Tomcat中,所以說我們就沒有必要翻牆去看國外的官網了,其官方文件就在webapps下的docs,雙擊其中的index.html即可進入官方文件首頁。在首頁中點選Apache Tomcat Clustering 超連結,即可開啟配置session共享的頁面,在這裡我們就可以找到上述程式碼資訊。
測試實現的session共享
tomcat1中的測試檔案testjsp.jsp
的原始碼如下:
<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: HP
Date: 2018/2/1
Time: 14:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
System.out.println(new Date()+"=============tomcat1=================");
HttpSession session1 = request.getSession();
System.out.println("sessionId為:" + session1.getId());
session1.setAttribute("name","zhangsan");
System.out.println("使用者sessionId為:" + session1.getAttribute("name"));
%>
tomcat1=======<%=new Date()%><br>
sessionId為:<%=session1.getId()%><br>
使用者sessionId為:<%=session1.getAttribute("name")%>
</body>
</html>
tomcat2、tomcat3與tomcat1的不同之處僅在於去掉了session1.setAttribute("name","zhangsan");
,同時將tomcat1改成各自的tomcat+數值。
測試Session共享結果
由於之前Tomcat進行了相應的配置檔案修改,所以說得需要進行重新啟動,啟動後,在瀏覽器中輸入下列地址進行結果檢視。
http://192.168.111.128/TestTomcat/testjsp.jsp
其結果如下:
如上所述,通過不斷的重新整理頁面,我們可以看到,tomcat後的數值一直在變動,但是sessionId和使用者在session中存放的資訊zhangsan卻一直不變,同時,由於該資訊是在tomcat1中進行設定的,在tomcat2與tomcat3中並未設定,但是我們卻同樣的可以取到,這說明我們的session共享已經順利的搭建完成。