【发布时间】:2020-08-18 09:20:59
【问题描述】:
我有一个不寻常的“错误”。我已经配置了 Tomcat 会话复制管理器 (Delta)。复制了 SessionID 和 Session 属性,但不复制属性的内容。
我在 server.xml 中的集群标签
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
<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="4001"
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.MessageDispatchInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
../webapps/ROOT/WEB-INF/web.xml 在所有其他机器上:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<distributable/>
</web-app>
../webapps/ROOT/index.jsp 适用于所有实例(1、2、..)
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.List"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="javax.servlet.http.HttpUtils.*" %>
<!DOCTYPE html>
<html>
<style type="text/css">
th {
font-weight:bold;
text-align:left;
}
</style>
<head>
<meta http-equiv="Content-Type" content"text/html"; charset=UTF-8">
<title> JSP PAGE </title>
</head>
<body>
<FONT size = 5 COLOR="#0000FF">
Instance 1 <br/> <br/>
</FONT>
<hr/>
<br/>
<table cellpadding="10" >
<tr> <th> Session Id </th> <td> <%=request.getSession().getId()%> </td> </tr>
<tr> <th> Is it New Session </th> <td> <%=request.getSession().isNew()%> </td> </tr>
<tr> <th> Session Create Date </th> <td> <%=new Date(request.getSession().getCreationTime())%> </td> </tr>
<tr> <th> Session Access Date </th> <td> <%=new Date(request.getSession().getLastAccessedTime())%> </td> </tr>
</table>
<br/><br/><br/><br/>
<b> Cart List </b> <br/>
<hr/>
<ul>
<%
String bookName = request.getParameter("bookName");
List<String> listOfBooks = (List<String>) request.getSession().getAttribute("Books");
if (listOfBooks == null) {
listOfBooks = new ArrayList<String>();
request.getSession().setAttribute("Books", listOfBooks);
}
if (bookName != null) {
listOfBooks.add(bookName);
}
for (String book : listOfBooks ) {
out.println("<li>"+book + "</li>");
}
%>
</ul>
<form action="index.jsp" method="POST" >
<input type= "text" name="bookName" placeholder="Enter bookname" required />
<input type = "submit" value = "add to cart" > <br/>
</form>
通过 index.jsp 添加一些会话属性/值后的结果
在 INSTANCE1(主要)
关于INSTANCE2(备份)(属性不会被复制!)
在日志文件中,我看到实例相互识别并且 发送信号。但是
-
当我发送 ping -t 1 -c 2 228.0.0.4 时,我得到以下信息: 发送2个包,接收0个,100%丢包,时间5852ms
-
为什么复制的是 SessionID 和 Attribute,而不是 Attribute 的值?
【问题讨论】:
标签: tomcat8 session-replication