blob: a501ff3324b52602f17dfb83ae50e2f28b8daac1 [file] [log] [blame]
刘洪青6266f992017-05-15 21:21:03 +08001<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 7 Configuration Reference (7.0.77) - The Cluster Sender object</title><meta name="author" content="Filip Hanik"><style type="text/css" media="print">
2 .noPrint {display: none;}
3 td#mainBody {width: 100%;}
4</style><style type="text/css">
5code {background-color:rgb(224,255,255);padding:0 0.1em;}
6code.attributeName, code.propertyName {background-color:transparent;}
7
8
9table {
10 border-collapse: collapse;
11 text-align: left;
12}
13table *:not(table) {
14 /* Prevent border-collapsing for table child elements like <div> */
15 border-collapse: separate;
16}
17
18th {
19 text-align: left;
20}
21
22
23div.codeBox pre code, code.attributeName, code.propertyName, code.noHighlight, .noHighlight code {
24 background-color: transparent;
25}
26div.codeBox {
27 overflow: auto;
28 margin: 1em 0;
29}
30div.codeBox pre {
31 margin: 0;
32 padding: 4px;
33 border: 1px solid #999;
34 border-radius: 5px;
35 background-color: #eff8ff;
36 display: table; /* To prevent <pre>s from taking the complete available width. */
37 /*
38 When it is officially supported, use the following CSS instead of display: table
39 to prevent big <pre>s from exceeding the browser window:
40 max-width: available;
41 width: min-content;
42 */
43}
44
45div.codeBox pre.wrap {
46 white-space: pre-wrap;
47}
48
49
50table.defaultTable tr, table.detail-table tr {
51 border: 1px solid #CCC;
52}
53
54table.defaultTable tr:nth-child(even), table.detail-table tr:nth-child(even) {
55 background-color: #FAFBFF;
56}
57
58table.defaultTable tr:nth-child(odd), table.detail-table tr:nth-child(odd) {
59 background-color: #EEEFFF;
60}
61
62table.defaultTable th, table.detail-table th {
63 background-color: #88b;
64 color: #fff;
65}
66
67table.defaultTable th, table.defaultTable td, table.detail-table th, table.detail-table td {
68 padding: 5px 8px;
69}
70
71
72p.notice {
73 border: 1px solid rgb(255, 0, 0);
74 background-color: rgb(238, 238, 238);
75 color: rgb(0, 51, 102);
76 padding: 0.5em;
77 margin: 1em 2em 1em 1em;
78}
79</style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="../images/tomcat.gif" align="right" alt="
Hongqing Liufd5ee812014-05-10 16:32:51 +080080 The Apache Tomcat Servlet/JSP Container
刘洪青6266f992017-05-15 21:21:03 +080081 " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 7</font></h1><font face="arial,helvetica,sanserif">Version 7.0.77, Mar 28 2017</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="../images/asf-logo.svg" align="right" alt="Apache Logo" border="0" style="width: 266px;height: 83px;"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap class="noPrint"><p><strong>Links</strong></p><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul><p><strong>Top Level Elements</strong></p><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul><p><strong>Executors</strong></p><ul><li><a href="executor.html">Executor</a></li></ul><p><strong>Connectors</strong></p><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul><p><strong>Containers</strong></p><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul><p><strong>Nested Components</strong></p><ul><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul><p><strong>Cluster Elements</strong></p><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul><p><strong>web.xml</strong></p><ul><li><a href="filter.html">Filter</a></li></ul><p><strong>Other</strong></p><ul><li><a href="systemprops.html">System properties</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>The Cluster Sender object</h1><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote>
82<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Concurrent_Parallel_Delivery">Concurrent Parallel Delivery</a></li><li><a href="#Nested_Elements">Nested Elements</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Sender_Attributes">Common Sender Attributes</a></li><li><a href="#Common_Transport_Attributes">Common Transport Attributes</a></li><li><a href="#Common_PooledSender_Attributes">Common PooledSender Attributes</a></li></ol></li></ul>
Hongqing Liufd5ee812014-05-10 16:32:51 +080083</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote>
84 <p>
85 The channel sender component is responsible for delivering outgoing cluster messages over the network.
86 In the default implementation, <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>,
87 the sender is a fairly empty shell with not much logic around a fairly complex <code>&lt;Transport&gt;</code>
88 component the implements the actual delivery mechanism.
89 </p>
90</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Concurrent Parallel Delivery"><!--()--></a><a name="Concurrent_Parallel_Delivery"><strong>Concurrent Parallel Delivery</strong></a></font></td></tr><tr><td><blockquote>
91 <p>
92 In the default <code>transport</code> implementation, <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>,
刘洪青6266f992017-05-15 21:21:03 +080093 Apache Tribes implements what we like to call "Concurrent Parallel Delivery".
Hongqing Liufd5ee812014-05-10 16:32:51 +080094 This means that we can send a message to more than one destination at the same time(parallel), and
刘洪青6266f992017-05-15 21:21:03 +080095 deliver two messages to the same destination at the same time(concurrent). Combine these two and we have
Hongqing Liufd5ee812014-05-10 16:32:51 +080096 "Concurrent Parallel Delivery".
97 </p>
98 <p>
99 When is this useful? The simplest example we can think of is when part of your code is sending a 10MB message,
100 like a war file being deployed, and you need to push through a small 10KB message, say a session being replicated,
刘洪青6266f992017-05-15 21:21:03 +0800101 you don't have to wait for the 10MB message to finish, as a separate thread will push in the small message
Hongqing Liufd5ee812014-05-10 16:32:51 +0800102 transmission at the same time. Currently there is no interrupt, pause or priority mechanism available, but check back soon.
103 </p>
104</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Nested Elements"><!--()--></a><a name="Nested_Elements"><strong>Nested Elements</strong></a></font></td></tr><tr><td><blockquote>
105 <p>
刘洪青6266f992017-05-15 21:21:03 +0800106 The nested element <code>&lt;Transport&gt;</code> is not required, but encouraged, as this is where
Hongqing Liufd5ee812014-05-10 16:32:51 +0800107 you would set all the socket options for the outgoing messages. Please see its attributes below.
108 There are two implementations, in a similar manner to the <a href="cluster-receiver.html">receiver</a>, one is non-blocking
109 based and the other is built using blocking IO. <br>
刘洪青6266f992017-05-15 21:21:03 +0800110 <code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code> is the blocking implementation and
Hongqing Liufd5ee812014-05-10 16:32:51 +0800111 <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>.
112 Parallel delivery is not available for the blocking implementation due to the fact that it is blocking a thread on sending data.
113 </p>
114</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Attributes"><strong>Attributes</strong></a></font></td></tr><tr><td><blockquote>
115 <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Common Sender Attributes"><!--()--></a><a name="Common_Sender_Attributes"><strong>Common Sender Attributes</strong></a></font></td></tr><tr><td><blockquote>
刘洪青6266f992017-05-15 21:21:03 +0800116 <table border="1" cellpadding="5"><tr><th width="15%" bgcolor="#023264"><font color="#ffffff">Attribute</font></th><th width="85%" bgcolor="#023264"><font color="#ffffff">Description</font></th></tr><tr><td align="left" valign="center"><strong><code class="attributeName">className</code></strong></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800117 Required, only available implementation is <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>
118 </td></tr></table>
119 </blockquote></td></tr></table>
120 <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Common Transport Attributes"><!--()--></a><a name="Common_Transport_Attributes"><strong>Common Transport Attributes</strong></a></font></td></tr><tr><td><blockquote>
刘洪青6266f992017-05-15 21:21:03 +0800121 <table border="1" cellpadding="5"><tr><th width="15%" bgcolor="#023264"><font color="#ffffff">Attribute</font></th><th width="85%" bgcolor="#023264"><font color="#ffffff">Description</font></th></tr><tr><td align="left" valign="center"><strong><code class="attributeName">className</code></strong></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800122 Required, an implementation of the <code>org.apache.catalina.tribes.transport.MultiPointSender</code>.<br>
123 Non-blocking implementation is <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code><br>
124 Blocking implementation is <code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code>
刘洪青6266f992017-05-15 21:21:03 +0800125 </td></tr><tr><td align="left" valign="center"><code class="attributeName">rxBufSize</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800126 The receive buffer size on the socket.
127 Default value is <code>25188</code> bytes.
刘洪青6266f992017-05-15 21:21:03 +0800128 </td></tr><tr><td align="left" valign="center"><code class="attributeName">txBufSize</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800129 The send buffer size on the socket.
130 Default value is <code>43800</code> bytes.
刘洪青6266f992017-05-15 21:21:03 +0800131 </td></tr><tr><td align="left" valign="center"><code class="attributeName">udpRxBufSize</code></td><td align="left" valign="center">
132 The receive buffer size on the datagram socket.
133 Default value is <code>25188</code> bytes.
134 </td></tr><tr><td align="left" valign="center"><code class="attributeName">udpTxBufSize</code></td><td align="left" valign="center">
135 The send buffer size on the datagram socket.
136 Default value is <code>43800</code> bytes.
137 </td></tr><tr><td align="left" valign="center"><code class="attributeName">directBuffer</code></td><td align="left" valign="center">
138 Possible values are <code>true</code> or <code>false</code>.
Hongqing Liufd5ee812014-05-10 16:32:51 +0800139 Set to true if you want the receiver to use direct bytebuffers when writing data
140 to the sockets. Default value is <code>false</code>
刘洪青6266f992017-05-15 21:21:03 +0800141 </td></tr><tr><td align="left" valign="center"><code class="attributeName">keepAliveCount</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800142 The number of requests that can go through the socket before the socket is closed, and reopened
143 for the next request. The default value is <code>-1</code>, which is unlimited.
刘洪青6266f992017-05-15 21:21:03 +0800144 </td></tr><tr><td align="left" valign="center"><code class="attributeName">keepAliveTime</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800145 The number of milliseconds a connection is kept open after its been opened.
146 The default value is <code>-1</code>, which is unlimited.
刘洪青6266f992017-05-15 21:21:03 +0800147 </td></tr><tr><td align="left" valign="center"><code class="attributeName">timeout</code></td><td align="left" valign="center">
148 Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is <code>3000</code>
Hongqing Liufd5ee812014-05-10 16:32:51 +0800149 milliseconds.(3 seconds) This timeout starts when a message send attempt is starting, until the transfer has been completed.
150 For the NIO sockets, this will mean, that the caller can guarantee that we will not attempt sending the message
151 longer than this timeout value. For the blocking IO implementation, this translated directly to the soTimeout.<br>
152 A timeout will not spawn a retry attempt, in order to guarantee the return of the application thread.
刘洪青6266f992017-05-15 21:21:03 +0800153 </td></tr><tr><td align="left" valign="center"><code class="attributeName">maxRetryAttempts</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800154 How many times do we retry a failed message, that received a IOException at the socket level.
刘洪青6266f992017-05-15 21:21:03 +0800155 The default value is <code>1</code>, meaning we will retry a message that has failed once.
156 In other words, we will attempt a message send no more than twice. One is the original send, and one is the
Hongqing Liufd5ee812014-05-10 16:32:51 +0800157 <code>maxRetryAttempts</code>.
刘洪青6266f992017-05-15 21:21:03 +0800158 </td></tr><tr><td align="left" valign="center"><code class="attributeName">ooBInline</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800159 Boolean value for the socket OOBINLINE option. Possible values are <code>true</code> or <code>false</code>.
刘洪青6266f992017-05-15 21:21:03 +0800160 </td></tr><tr><td align="left" valign="center"><code class="attributeName">soKeepAlive</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800161 Boolean value for the socket SO_KEEPALIVE option. Possible values are <code>true</code> or <code>false</code>.
刘洪青6266f992017-05-15 21:21:03 +0800162 </td></tr><tr><td align="left" valign="center"><code class="attributeName">soLingerOn</code></td><td align="left" valign="center">
163 Boolean value to determine whether to use the SO_LINGER socket option.
Hongqing Liufd5ee812014-05-10 16:32:51 +0800164 Possible values are <code>true</code> or <code>false</code>. Default value is <code>true</code>.
刘洪青6266f992017-05-15 21:21:03 +0800165 </td></tr><tr><td align="left" valign="center"><code class="attributeName">soLingerTime</code></td><td align="left" valign="center">
166 Sets the SO_LINGER socket option time value. The value is in seconds.
Hongqing Liufd5ee812014-05-10 16:32:51 +0800167 The default value is <code>3</code> seconds.
刘洪青6266f992017-05-15 21:21:03 +0800168 </td></tr><tr><td align="left" valign="center"><code class="attributeName">soReuseAddress</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800169 Boolean value for the socket SO_REUSEADDR option. Possible values are <code>true</code> or <code>false</code>.
刘洪青6266f992017-05-15 21:21:03 +0800170 </td></tr><tr><td align="left" valign="center"><code class="attributeName">soTrafficClass</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800171 Sets the traffic class level for the socket, the value is between 0 and 255.
172 Default value is <code>int soTrafficClass = 0x04 | 0x08 | 0x010;</code>
刘洪青6266f992017-05-15 21:21:03 +0800173 Different values are defined in <a href="http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setTrafficClass(int)">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800174 java.net.Socket#setTrafficClass(int)</a>.
刘洪青6266f992017-05-15 21:21:03 +0800175 </td></tr><tr><td align="left" valign="center"><code class="attributeName">tcpNoDelay</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800176 Boolean value for the socket TCP_NODELAY option. Possible values are <code>true</code> or <code>false</code>.
177 The default value is <code>true</code>
刘洪青6266f992017-05-15 21:21:03 +0800178 </td></tr><tr><td align="left" valign="center"><code class="attributeName">throwOnFailedAck</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800179 Boolean value, default value is <code>true</code>.
180 If set to true, the sender will throw a <code>org.apache.catalina.tribes.RemoteProcessException</code>
181 when we receive a negative ack from the remote member.
182 Set to false, and Tribes will treat a positive ack the same way as a negative ack, that the message was received.
183 </td></tr></table>
184 </blockquote></td></tr></table>
刘洪青6266f992017-05-15 21:21:03 +0800185 <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Common PooledSender Attributes"><!--()--></a><a name="Common_PooledSender_Attributes"><strong>Common PooledSender Attributes</strong></a></font></td></tr><tr><td><blockquote>
186 <table border="1" cellpadding="5"><tr><th width="15%" bgcolor="#023264"><font color="#ffffff">Attribute</font></th><th width="85%" bgcolor="#023264"><font color="#ffffff">Description</font></th></tr><tr><td align="left" valign="center"><code class="attributeName">poolSize</code></td><td align="left" valign="center">
Hongqing Liufd5ee812014-05-10 16:32:51 +0800187 The maximum number of concurrent connections from A to B.
188 The value is based on a per-destination count.
189 The default value is <code>25</code>
刘洪青6266f992017-05-15 21:21:03 +0800190 </td></tr><tr><td align="left" valign="center"><code class="attributeName">maxWait</code></td><td align="left" valign="center">
191 The maximum number of milliseconds that the senderPool will wait when
192 there are no available senders. The default value is <code>3000</code>
193 milliseconds.(3 seconds).
Hongqing Liufd5ee812014-05-10 16:32:51 +0800194 </td></tr></table>
195 </blockquote></td></tr></table>
刘洪青6266f992017-05-15 21:21:03 +0800196</blockquote></td></tr></table></td></tr><tr class="noPrint"><td width="20%" valign="top" nowrap class="noPrint"></td><td width="80%" valign="top" align="left"><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="comments_section" id="comments_section"><strong>Comments</strong></a></font></td></tr><tr><td><blockquote><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
197 on improving documentation for Apache Tomcat.<br><br>
198 If you have trouble and need help, read
199 <a href="http://tomcat.apache.org/findhelp.html">Find Help</a> page
200 and ask your question on the tomcat-users
201 <a href="http://tomcat.apache.org/lists.html">mailing list</a>.
202 Do not ask such questions here. This is not a Q&amp;A section.<br><br>
203 The Apache Comments System is explained <a href="../comments.html">here</a>.
204 Comments may be removed by our moderators if they are either
205 implemented or considered invalid/off-topic.</p><script type="text/javascript"><!--//--><![CDATA[//><!--
206 var comments_shortname = 'tomcat';
207 var comments_identifier = 'http://tomcat.apache.org/tomcat-7.0-doc/config/cluster-sender.html';
208 (function(w, d) {
209 if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
210 d.write('<div id="comments_thread"><\/div>');
211 var s = d.createElement('script');
212 s.type = 'text/javascript';
213 s.async = true;
214 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
215 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
216 }
217 else {
218 d.write('<div id="comments_thread"><strong>Comments are disabled for this page at the moment.<\/strong><\/div>');
219 }
220 })(window, document);
221 //--><!]]></script></blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>
222 Copyright &copy; 1999-2017, Apache Software Foundation
Hongqing Liufd5ee812014-05-10 16:32:51 +0800223 </em></font></div></td></tr></table></body></html>