Session共享(一) tomcat 自带集群session共享实现

亲测。

请将第一点看清楚,很多文章没有说明这个。其实我之前发过一次了,后来发现别人都没有说明,我就怀疑是不是我弄错了,怕误人子弟,就删了。

继续测试,最终发现。。。。没提到这个的才是误人子弟。。。。

先不说怎么做,咱们先说说用的过程中的感受:

1、第一个特别需要强调的是,这个只适合同一台机器上的tomcat,而且要项目名称一致。这个两个条件,缺一不可。

请看清上面这个看的不太清楚的文字。非常重要。

没错,你没看错。

我一开始,做测试的时候,是写在本地的我发现,good,session一致,后来放到两台机器上,就不行了。再往深了测,发现,同一台机器上的两个tomcat的两个不同项目,也不行。

这种方式实际上就是组播模式。

tomcat间是以IP组播发送变更的数据,将数据发送到集群组的其他成员。这个IP就是那个228.0.0.4。

看到这,你肯定和我的想法一样,这个TMD还能用?

2、其实这个也是有场景可以使用的:客户不给你加机器的时候,这个场景用这个自带的就很好用,实现起来简单。

具体的实现步骤就两步:

1、在tomcat的server.xml 文件中找到 <Engine name="Catalina" defaultHost="localhost"> 标签

在这个标签下面加入下面内容,不要改动:

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                 channelSendOptions="8">  
  3.   
  4.          <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  5.                   expireSessionsOnShutdown="false"  
  6.                   notifyListenersOnReplication="true"/>  
  7.   
  8.          <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  9.            <Membership className="org.apache.catalina.tribes.membership.McastService"  
  10.                        address="228.0.0.4"  
  11.                        port="45564"  
  12.                        frequency="500"  
  13.                        dropTime="3000"/>  
  14.            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  15.                      address="auto"  
  16.                      port="4000"  
  17.                      autoBind="100"  
  18.                      selectorTimeout="5000"  
  19.                      maxThreads="6"/>  
  20.   
  21.            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  22.            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  23.            </Sender>  
  24.            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  25.            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  26.          </Channel>  
  27.   
  28.          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  29.                 filter=""/>  
  30.          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  31.   
  32.          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  33.                    tempDir="/tmp/war-temp/"  
  34.                    deployDir="/tmp/war-deploy/"  
  35.                    watchDir="/tmp/war-listen/"  
  36.                    watchEnabled="false"/>  
  37.   
  38.          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  39.          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  40.        </Cluster>  

2、web项目的web.xml文件中加入 <distributable/> 标签;

这个标签必须要有。

3、验证:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'index.jsp' starting page</title>  
  13.     <meta http-equiv="pragma" content="no-cache">  
  14.     <meta http-equiv="cache-control" content="no-cache">  
  15.     <meta http-equiv="expires" content="0">      
  16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.     <meta http-equiv="description" content="This is my page">  
  18.     <!-- 
  19.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  20.     -->  
  21.   </head>  
  22.     
  23.   <body>  
  24.       
  25.         SessionID:<%=session.getId()%>  
  26.         <BR>  
  27.         SessionIP:<%=request.getServerName()%>  
  28.         <BR>  
  29.         SessionPort:<%=request.getServerPort()%>  
  30.         <%  
  31.         out.println("This is Tomcat Server 11111");  
  32.         %>  
  33.   </body>  
  34. </html>  

你会发现,sessionId是一致的。




  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值