1. 程式人生 > >Tomcat伺服器叢集Session共享

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共享已經順利的搭建完成。