<?xml version="1.0" encoding="ISO-8859-1" ?>

<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing,
  ~  software distributed under the License is distributed on an
  ~   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~  KIND, either express or implied.  See the License for the
  ~  specific language governing permissions and limitations
  ~  under the License.
  -->

<document>
    <properties>
        <title>Apache Synapse - Non-blocking HTTP Transport</title>
    </properties>
    <body>
        <section name="Non-blocking HTTP Transport" id="Contents">
            <ul>
                <li>
                    <a href="#Introduction">Introduction</a>
                </li>
                <li>
                    <a href="#Configuration">Transport Configuration</a>
                    <ul>
                        <li><a href="#HTTPListener">HTTP Transport Listener</a></li>
                        <li><a href="#HTTPSender">HTTP Transport Sender</a></li>
                        <li><a href="#HTTPSListener">HTTPS Transport Listener</a></li>
                        <li><a href="#HTTPSSender">HTTPS Transport Sender</a></li>
                    </ul>
                </li>
                <li>
                    <a href="#AdvancedSettings">Advanced Settings and Performance Tuning</a>
                    <ul>
                        <li><a href="#HttpCoreSettings">Apache HTTP Core Settings</a></li>
                        <li><a href="#SynapseSettings">Synapse HTTP Mediation Settings</a></li>
                        <li><a href="#ThreadPoolSettings">Thread Pool Settings</a></li>
                    </ul>
                </li>
                <li>
                    <a href="#Logging">Logging Configuration</a>
                </li>
            </ul>
        </section>
        <section name="Introduction" id="Introduction">
            <p>
                The non-blocking HTTP transport (NHTTP transport) was the default HTTP transport of
                Synapse 2.1 and all the releases that preceded it. Synapse 2.1 was the
                last release of Synapse to use the NHTTP transport by default to send and
                receive HTTP traffic. In the following releases the NHTTP transport has been replaced
                by the new <a href="pass_through.html">Pass Through HTTP transport</a>. The NHTTP
                transport is still shipped with Synapse, and the interested users may use it by
                enabling it in the <strong>SYNAPSE_HOME/repository/conf/axis2.xml</strong> file. The
                sample Axis2 server distributed with Synapse, still uses the NHTTP transport by
                default.
            </p>
            <p>
                The NHTTP transport is very stable, mature, and is capable of handling
                large volumes of HTTP traffic. However, the new Pass Through transport is even
                more efficient, faster and highly optimized to handle content agnostic mediation.
                Also, the new transport supports almost all the features and options supported by
                the NHTTP transport. The features that are not yet supported, will be added to the
                Pass Through transport in the near future. Therefore, it is highly recommended to
                use the Pass Through transport whenever possible, and enable the NHTTP transport only
                if you really need to use a feature that's still not supported by the Pass Through
                transport.
            </p>
            <p>
                The NHTTP transport is based on the Apache HTTP Core NIO library. This library is
                based on the <a href="http://en.wikipedia.org/wiki/Reactor_pattern">reactor pattern</a>,
                and the transport uses two separate I/O reactor instances:
                <ul>
                    <li>
                        Listening I/O reactor: Handles network interactions between client
                        applications and Synapse.
                    </li>
                    <li>
                        Connecting I/O reactor: Handles network interactions between Synapse and
                        the backend services.
                    </li>
                </ul>
                Each reactor instance uses its own set of threads and in addition, the NHTTP transport
                uses separate configurable thread pools for processing received messages through
                the mediation engine. Settings related to configuring I/O reactor threads and NHTTP
                threads are discussed under <a href="#AdvancedSettings">advanced settings</a>.
            </p>
            <p><a href="#Contents">[Back to top]</a></p>
        </section>
        <section name="Transport Configuration" id="Configuration">
            <p>
                The Non-blocking HTTP transport is no longer configured by default in the
                <strong>SYNAPSE_HOME/repository/conf/axis2.xml</strong> file of Synapse. If you
                wish to use this transport, you must add the necessary configurations to the axis2.xml
                file. In general, you may enable the following components of the NHTTP transport via
                the axis2.xml file.
            </p>
            <ul>
                <li>HTTP transport listener</li>
                <li>HTTP transport sender</li>
                <li>HTTPS transport listener</li>
                <li>HTTPS transport sender</li>
            </ul>
            <p>
                Each of the above components should be configured separately in the axis2.xml file.
                Next few sections describe the various parameters that can be used to customize the
                behavior of these components.
            </p>
            <subsection name="HTTP Transport Listener" id="HTTPListener">
                <p>
                    To enable the HTTP transport listener, you must add the following XML configuration
                    to the axis2.xml file.
                </p>
                <div class="xmlConf">&lt;transportReceiver name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOListener"&gt;
    &lt;parameter name="port"&gt;8280&lt;/parameter&gt;
&lt;/transportReceiver&gt;</div>
                <p>
                    The only required parameter is the port parameter. A complete list of supported
                    parameters is given below.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>port</td>
                        <td>
                            The port number on which the HTTP listener should listen.
                            <div class="xmlConf">&lt;parameter name="port"&gt;8280&lt;/parameter&gt;</div>
                        </td>
                        <td>Yes</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>bind-address</td>
                        <td>
                            The hostname or IP address to which the HTTP listener should bind. When
                            deploying Synapse on machines that have multiple network interfaces,
                            this parameter can be used to bind the HTTP listener to a specific network
                            interface.
                            <div class="xmlConf">&lt;parameter name="bind-address"&gt;10.0.0.5&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>All available network interfaces</td>
                    </tr>
                    <tr>
                        <td>hostname</td>
                        <td>
                            The hostname or IP address used to calculate the service endpoints
                            exposed through this transport listener. This can be used to customize
                            the hostname of the endpoints (EPRs) that appear in the generated WSDLs.
                            This parameter is ignored if the WSDLEPRPrefix parameter is set.
                            <div class="xmlConf">&lt;parameter name="hostname"&gt;10.0.0.5&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>localhost</td>
                    </tr>
                    <tr>
                        <td>WSDLEPRPrefix</td>
                        <td>
                            A URL prefix that should be added to all the HTTP endpoints exposed
                            through this transport listener. This prefix will appear in all WSDLs
                            advertised by the transport. This is particularly useful when Synapse
                            is fronted by a proxy server or a load balancer and it is required to mention
                            the proxy/load balancer endpoints in the WSDLs generated by Synapse. This
                            parameter has higher priority than the hostname parameter.
                            <div class="xmlConf">&lt;parameter name="WSDLEPRPrefix"&gt;http://proxy.example.com:8080/&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>http://&lt;host&gt;:&lt;port&gt;/</td>
                    </tr>
                    <tr>
                        <td>httpGetProcessor</td>
                        <td>
                            The full qualified name of the class that's responsible for handling incoming
                            HTTP GET requests. The specified class must implement the
                            org.apache.synapse.transport.nhttp.HttpGetRequestProcessor interface. If it
                            is required to customize the way Synapse handles HTTP GET requests, one could
                            implement the above interface, and register the custom class with Synapse using
                            this parameter. By default Synapse ships with an HTTP GET request handler that
                            responds to ?wsdl and ?xsd requests and mediates all the others.
                            <div class="xmlConf">&lt;parameter name="httpGetProcessor"&gt;foo.bar.CustomGETProcessor&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>disableRestServiceDispatching</td>
                        <td>
                            Determines whether Synapse should attempt to dispatch REST calls to any
                            of the deployed proxy services. If set to true, Synapse will not dispatch
                            REST calls to proxy services.
                            <div class="xmlConf">&lt;parameter name="disableRestServiceDispatching"&gt;true&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>priorityConfigFile</td>
                        <td>
                            Path to a traffic flow priority configuration file. See the documentation
                            related to Synapse priority executors to learn more about this feature.
                            <div class="xmlConf">&lt;parameter name="priorityConfigFile"&gt;repository/conf/priority.xml&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>endpointsConfiguration</td>
                        <td>
                            Path to an Axis2 URL endpoint configuration file. This is a mechanism to
                            specify message builders at the inbound endpoint level.
                            <div class="xmlConf">&lt;parameter name="endpointsConfiguration"&gt;repository/conf/endpoints.xml&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                </table>
                <p>
                    All the above parameters are also applicable to the HTTPS transport listener.
                </p>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
            <subsection name="HTTP Transport Sender" id="HTTPSender">
                <p>
                    To enable the HTTP sender, add the following configuration to the axis2.xml
                    file.
                </p>
                <div class="xmlConf">&lt;transportSender name="http"  class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender"&gt;
    &lt;parameter name="warnOnHTTP500" locked="false"&gt;*&lt;/parameter&gt;
&lt;/transportSender&gt;</div>
                <p>
                    Following parameters can be specified to customize the behavior of the HTTP
                    sender.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>http.proxyHost</td>
                        <td>
                            The hostname or IP address of the proxy server through which the HTTP
                            messages should be sent. Use this property when Synapse should use an
                            external HTTP proxy to tunnel the outgoing HTTP traffic. This parameter
                            is only applicable to the HTTP sender. HTTPS sender does not support
                            external proxies yet.
                            <div class="xmlConf">&lt;parameter name="http.proxyHost"&gt;proxy.example.com&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>http.proxyPort</td>
                        <td>
                            The port number of the proxy server through which the HTTP messages
                            should be sent. Only used if the http.proxyHost parameter is also
                            configured. This parameter is only applicable to the HTTP sender.
                            HTTPS sender does not support external proxies yet.
                            <div class="xmlConf">&lt;parameter name="http.proxyPort"&gt;8080&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>80</td>
                    </tr>
                    <tr>
                        <td>http.nonProxyHosts</td>
                        <td>
                            Use this parameter to specify a proxy bypass list. That is, a list of
                            target hosts for which Synapse will not use the configured external
                            proxy. Only used if the http.proxyHost parameter is also set. The value
                            of this parameter can be a single hostname/IP address or a list of
                            hostnames/IP addresses separated by the '|' character. Parameter also
                            supports regular expressions which can be used to specify hostname
                            patterns.
                            <div class="xmlConf">&lt;parameter name="http.nonProxyHosts"&gt;10.0.0.8|foo.com|*.bar.org&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>warnOnHTTP500</td>
                        <td>
                            A pipe ('|') separated list of content-types for which Synapse will
                            log a warning when receiving an HTTP 500 response. By default Synapse
                            outputs a warning for any HTTP 500 response, irrespective of the content-type.
                            To configure Synapse to log warnings for HTTP 500 responses with no
                            content-type header, use the value 'none'.
                            <div class="xmlConf">&lt;parameter name="warnOnHTTP500"&gt;x-application/hessian|none&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>all content types</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
            <subsection name="HTTPS Transport Listener" id="HTTPSListener">
                <p>
                    HTTPS listener supports all the parameters supported by the
                    HTTP listener. In addition, HTTPS listener supports several SSL/TLS specific
                    parameters. To enable the HTTPS listener, add the following configuration to the
                    axis2.xml
                </p>
                <div class="xmlConf">&lt;transportReceiver name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLListener"&gt;
        &lt;parameter name="port" locked="false"&gt;8243&lt;/parameter&gt;
        &lt;parameter name="keystore" locked="false"&gt;
            &lt;KeyStore&gt;
                &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
                &lt;Type&gt;JKS&lt;/Type&gt;
                &lt;Password&gt;password&lt;/Password&gt;
                &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
            &lt;/KeyStore&gt;
        &lt;/parameter&gt;
        &lt;parameter name="truststore" locked="false"&gt;
            &lt;TrustStore&gt;
                &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
                &lt;Type&gt;JKS&lt;/Type&gt;
                &lt;Password&gt;password&lt;/Password&gt;
            &lt;/TrustStore&gt;
        &lt;/parameter&gt;
    &lt;/transportReceiver&gt;</div>
                <p>
                    A complete list of parameters supported by the HTTPS listener is given below.
                    Information regarding the parameters also supported by the HTTP listener are
                    duplicated here for reader's convenience.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>port</td>
                        <td>
                            The port number on which the HTTPS listener should listen.
                            <div class="xmlConf">&lt;parameter name="port"&gt;8243&lt;/parameter&gt;</div>
                        </td>
                        <td>Yes</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>keystore</td>
                        <td>
                            Specifies the keystore that should be used to initialize SSL/TLS
                            support. A keystore typically houses a private key and some certificates
                            with their corresponding public keys. The value of this parameter is a
                            complex XML element. This XML element should specify:
                            <ul>
                                <li>Location: Path to the keystore file</li>
                                <li>Type: type of the keystore file (JKS, PKCS etc.)</li>
                                <li>Password: Password to unlock the keystore file</li>
                                <li>KeyPassword: Password to unlock the private key in the keystore file</li>
                            </ul>
                            All 4 values are required. Keystore paths are resolved relative to the
                            Synapse installation (SYNAPSE_HOME) directory. If you are not familiar with
                            Java security and keystores, please refer
                            <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">Java Cryptography Architecture</a>
                            specification.
                            <br/>
                            <br/>
                            <strong>
                                Synapse ships with a default keystore file. It is highly recommended
                                that a different keystore file is used in production deployments of
                                Synapse, since the passwords of the default keystore are publicly
                                known.
                            </strong>
                            <div class="xmlConf">&lt;parameter name="keystore" locked="false"&gt;
    &lt;KeyStore&gt;
        &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
        &lt;Type&gt;JKS&lt;/Type&gt;
        &lt;Password&gt;password&lt;/Password&gt;
        &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
    &lt;/KeyStore&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>truststore</td>
                        <td>
                            Specifies the truststore that should be used to initialize SSL/TLS
                            support. A truststore typically houses the CA certificates and other
                            trusted public certificates. The value of this parameter is a complex
                            XML element. This XML element should specify:
                            <ul>
                                <li>Location: Path to the truststore file</li>
                                <li>Type: type of the truststore file (JKS, PKCS etc.)</li>
                                <li>Password: Password to unlock the truststore file</li>
                            </ul>
                            All 3 values are required. Truststore paths are resolved relative to the
                            Synapse installation (SYNAPSE_HOME) directory. If you are not familiar with
                            Java security and truststores, please refer
                            <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">Java Cryptography Architecture</a>
                            specification.
                            <br/>
                            <br/>
                            <strong>
                                Synapse ships with a default truststore file. It is highly recommended
                                that a different truststore file is used in production deployments of
                                Synapse, since the password of the default truststore is publicly
                                known.
                            </strong>
                            <div class="xmlConf">&lt;parameter name="truststore" locked="false"&gt;
    &lt;TrustStore&gt;
        &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
        &lt;Type&gt;JKS&lt;/Type&gt;
        &lt;Password&gt;password&lt;/Password&gt;
    &lt;/TrustStore&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>SSLVerifyClient</td>
                        <td>
                            Use this parameter to enable client certificate verification (client
                            authentication). This option provides functionality similar to the
                            <a href="http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslverifyclient">SSLVerifyClient directive</a>
                            of Apache HTTPD. Supported values are:
                            <ul>
                                <li>none: No client certificate is required</li>
                                <li>optional: Client may present a valid certificate, but is not required to do so</li>
                                <li>require: Client must present a valid certificate (the SSL handshake will not succeed without it)</li>
                            </ul>
                            <div class="xmlConf">&lt;parameter name="SSLVerifyClient"&gt;require&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>None</td>
                    </tr>
                    <tr>
                        <td>bind-address</td>
                        <td>
                            The hostname or IP address to which the HTTP listener should bind. When
                            deploying Synapse on machines that have multiple network interfaces,
                            this parameter can be used to bind the HTTP listener to a specific network
                            interface.
                            <div class="xmlConf">&lt;parameter name="bind-address"&gt;10.0.0.5&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>All available network interfaces</td>
                    </tr>
                    <tr>
                        <td>hostname</td>
                        <td>
                            The hostname or IP address used to calculate the service endpoints
                            exposed through this transport listener. This can be used to customize
                            the hostname of the endpoints (EPRs) that appear in the generated WSDLs.
                            This parameter is ignored if the WSDLEPRPrefix parameter is set.
                            <div class="xmlConf">&lt;parameter name="hostname"&gt;10.0.0.5&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>localhost</td>
                    </tr>
                    <tr>
                        <td>httpGetProcessor</td>
                        <td>
                            The full qualified name of the class that's responsible for handling incoming
                            HTTP GET requests. The specified class must implement the
                            org.apache.synapse.transport.nhttp.HttpGetRequestProcessor interface. If it
                            is required to customize the way Synapse handles HTTP GET requests, one could
                            implement the above interface, and register the custom class with Synapse using
                            this parameter. By default Synapse ships with an HTTP GET request handler that
                            responds to ?wsdl and ?xsd requests and mediates all the others.
                            <div class="xmlConf">&lt;parameter name="httpGetProcessor"&gt;foo.bar.CustomGETProcessor&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>WSDLEPRPrefix</td>
                        <td>
                            A URL prefix that should be added to all the HTTP endpoints exposed
                            through this transport listener. This prefix will appear in all WSDLs
                            advertised by the transport. This is particularly useful when Synapse
                            is fronted by a proxy server or a load balancer and it is required to mention
                            the proxy/load balancer endpoints in the WSDLs generated by Synapse. This
                            parameter has higher priority than the hostname parameter.
                            <div class="xmlConf">&lt;parameter name="WSDLEPRPrefix"&gt;https://proxy.example.com:8443/&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>https://&lt;host&gt;:&lt;port&gt;/</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
            <subsection name="HTTPS Transport Sender" id="HTTPSSender">
                <p>
                    As of today, HTTPS sender does not support sending messages
                    through an external proxy. Therefore some of the parameters supported by the
                    HTTP sender (http.proxyHost, http.proxyPort etc.) cannot be used with the
                    HTTPS sender. However, there are several SSL/TLS related parameters that need
                    to be configured when setting up the HTTPS sender. The default HTTPS sender
                    configuration in the axis2.xml file is shown below.
                </p>
                <div class="xmlConf">&lt;transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender"&gt;
    &lt;parameter name="keystore" locked="false"&gt;
        &lt;KeyStore&gt;
            &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
            &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
        &lt;/KeyStore&gt;
    &lt;/parameter&gt;
    &lt;parameter name="truststore" locked="false"&gt;
        &lt;TrustStore&gt;
            &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
        &lt;/TrustStore&gt;
    &lt;/parameter&gt;
&lt;/transportSender&gt;</div>
                <p>
                    Following table lists all the parameters supported by the Pass Through HTTPS
                    sender.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>keystore</td>
                        <td>
                            Specifies the keystore that should be used to initialize SSL/TLS
                            support. A keystore typically houses a private key and some certificates
                            with their corresponding public keys. The value of this parameter is a
                            complex XML element. This XML element should specify:
                            <ul>
                                <li>Location: Path to the keystore file</li>
                                <li>Type: type of the keystore file (JKS, PKCS etc.)</li>
                                <li>Password: Password to unlock the keystore file</li>
                                <li>KeyPassword: Password to unlock the private key in the keystore file</li>
                            </ul>
                            All 4 values are required. Keystore paths are resolved relative to the
                            Synapse installation (SYNAPSE_HOME) directory. If you are not familiar with
                            Java security and keystores, please refer
                            <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">Java Cryptography Architecture</a>
                            specification.
                            <br/>
                            <br/>
                            <strong>
                                Synapse ships with a default keystore file. It is highly recommended
                                that a different keystore file is used in production deployments of
                                Synapse, since the passwords of the default keystore are publicly
                                known.
                            </strong>
                            <div class="xmlConf">&lt;parameter name="keystore" locked="false"&gt;
    &lt;KeyStore&gt;
        &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
        &lt;Type&gt;JKS&lt;/Type&gt;
        &lt;Password&gt;password&lt;/Password&gt;
        &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
    &lt;/KeyStore&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>truststore</td>
                        <td>
                            Specifies the truststore that should be used to initialize SSL/TLS
                            support. A truststore typically houses the CA certificates and other
                            trusted public certificates. The value of this parameter is a complex
                            XML element. This XML element should specify:
                            <ul>
                                <li>Location: Path to the truststore file</li>
                                <li>Type: type of the truststore file (JKS, PKCS etc.)</li>
                                <li>Password: Password to unlock the truststore file</li>
                            </ul>
                            All 3 values are required. Truststore paths are resolved relative to the
                            Synapse installation (SYNAPSE_HOME) directory. If you are not familiar with
                            Java security and truststores, please refer
                            <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">Java Cryptography Architecture</a>
                            specification.
                            <br/>
                            <br/>
                            <strong>
                                Synapse ships with a default truststore file. It is highly recommended
                                that a different truststore file is used in production deployments of
                                Synapse, since the password of the default truststore is publicly
                                known.
                            </strong>
                            <div class="xmlConf">&lt;parameter name="truststore" locked="false"&gt;
    &lt;TrustStore&gt;
        &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
        &lt;Type&gt;JKS&lt;/Type&gt;
        &lt;Password&gt;password&lt;/Password&gt;
    &lt;/TrustStore&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>HostnameVerifier</td>
                        <td>
                            This parameter can be used to configure target hostname verification.
                            That is, it enables validating server hostnames against the names specified
                            in the certificates presented by the servers during SSL handshake.
                            Supported values are:
                            <ul>
                                <li>Default</li>
                                <li>DefaultAndLocalhost</li>
                                <li>AllowAll</li>
                                <li>Strict</li>
                            </ul>
                            Please refer <a href="http://synapse.apache.org/apidocs/org/apache/synapse/transport/nhttp/HostnameVerifier.html">HostnameVerifier</a>
                            Javadocs to learn more about this feature and the semantics of the above
                            options. The AllowAll option essentially disables hostname verification
                            by accepting all certificates. The Strict option requires the server
                            hostnames to match exactly to the names specified in the server certificates.
                            Any deviations will cause the SSL handshake to fail.
                            <div class="xmlConf">&lt;parameter name="HostnameVerifier"&gt;Strict&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>Default</td>
                    </tr>
                    <tr>
                        <td>novalidatecert</td>
                        <td>
                            Use this parameter to turn on/off server certificate validation. If set to
                            'true', the HTTPS sender will not attempt to validate the certificates
                            presented by the remote servers. This behavior, however, is not recommended
                            for production deployments due to the potential security risks. If the
                            truststore parameter is specified, the value of this parameter is ignored
                            altogether.
                            <div class="xmlConf">&lt;parameter name="novalidatecert"&gt;true&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>customSSLProfiles</td>
                        <td>
                            By default, the HTTPS sender uses the SSL settings configured under
                            keystore and truststore parameters to communicate with all remote
                            HTTPS endpoints. However, in some cases we may need to use different
                            SSL settings to communicate with different endpoints. The customSSLProfiles
                            parameter allows configuring separate keystores and truststores for
                            each destination server. The value of this parameter is a set of XML elements
                            (profile elements). Each profile element must be configured with the following
                            child elements:
                            <ul>
                                <li>servers: A comma-separated list of servers to which this SSL profile is related to</li>
                                <li>KeyStore: A keystore configuration (similar to the keystore parameter)</li>
                                <li>TrustStore: A truststore configuration (similar to the truststore parameter)</li>
                                <li>novalidatecert: Optional element to disable certification validation (can be set to true or false)</li>
                            </ul>
                            An example is given below. According to this configuration, when Synapse
                            communicates with server1.example.com or server2.example.com, it will use
                            the first SSL configuration (identity1.jks and trust1.jks). When
                            communicating with server3.example.com, it will use the second SSL
                            configuration (identity2.jks and trust2.jks). For all other endpoints,
                            Synapse will use the default SSL configuration, configured under keystore
                            and truststore parameters.
                            <div class="xmlConf">&lt;parameter name="customSSLProfiles"&gt;
    &lt;profile&gt;
        &lt;servers&gt;server1.example.com:443,server2.example.com:443&lt;/servers&gt;
        &lt;KeyStore&gt;
            &lt;Location&gt;lib/identity1.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
            &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
        &lt;/KeyStore&gt;
        &lt;TrustStore&gt;
            &lt;Location&gt;lib/trust1.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
        &lt;/TrustStore&gt;
    &lt;/profile&gt;
    &lt;profile&gt;
        &lt;servers&gt;server3.example.com:443&lt;/servers&gt;
        &lt;KeyStore&gt;
            &lt;Location&gt;lib/identity2.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
            &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
        &lt;/KeyStore&gt;
        &lt;TrustStore&gt;
            &lt;Location&gt;lib/trust2.jks&lt;/Location&gt;
            &lt;Type&gt;JKS&lt;/Type&gt;
            &lt;Password&gt;password&lt;/Password&gt;
        &lt;/TrustStore&gt;
    &lt;/profile&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>CertificateRevocationVerifier</td>
                        <td>
                            Enable revocation status validation of server certificates using
                            <a href="http://www.ietf.org/rfc/rfc2560.txt">OCSP</a> and
                            <a href="http://www.ietf.org/rfc/rfc5280.txt">CRL</a>. Simply uncommenting
                            this parameter under the HTTPS sender configuration will activate the
                            feature. Two LRU caches are used to cache CRLs and OCSP responses until
                            they are expired. Two child XML elements are used to configure the cache
                            behavior.
                            <ul>
                                <li>
                                    CacheSize: Controls the maximum size of each cache. When this
                                    limit is reached, the old values will be automatically removed
                                    and updated with new values. Default value is 50.
                                </li>
                                <li>
                                    CacheDurationMins: Sets the time duration (in minutes) between
                                    two consecutive runs of the CacheManager task which periodically
                                    performs housekeeping work in each cache. Default value is 15.
                                </li>
                            </ul>
                            <div class="xmlConf">&lt;parameter name="CertificateRevocationVerifier" locked="false"&gt;
    &lt;CacheSize&gt;100&lt;/CacheSize&gt;
    &lt;CacheDurationMins&gt;&lt;/CacheDurationMins&gt;
&lt;/parameter&gt;</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
        </section>
        <section name="Advanced Settings and Performance Tuning" id="AdvancedSettings">
            <p>
                In addition to the basic parameters described in the previous section, the
                NHTTP transport provides some advanced options to tweak its
                runtime behavior and performance. These options should be configured in the
                <strong>SYNAPSE_HOME/lib/nhttp.properties</strong> file.
            </p>
            <subsection name="Apache HTTP Core Settings" id="HttpCoreSettings">
                <p>
                    Following properties control various facets of
                    <a href="http://hc.apache.org/httpcomponents-core-ga/index.html">Apache HTTP Core</a>,
                    the framework underlying the NHTTP transport.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>http.socket.timeout <a name="http.socket.timeout"/></td>
                        <td>
                            Sets the TCP socket timeout in milliseconds
                            (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT">SO_TIMEOUT</a>).
                            This applies to sockets opened by both transport listener and sender.
                            <div class="xmlConf">http.socket.timeout=20000</div>
                        </td>
                        <td>No</td>
                        <td>60000</td>
                    </tr>
                    <tr>
                        <td>http.socket.timeout.listener</td>
                        <td>
                            Sets the timeout in milliseconds for all the TCP sockets opened by the
                            transport listener. This overrides the value of
                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
                            listener.
                            <div class="xmlConf">http.socket.timeout.listener=20000</div>
                        </td>
                        <td>No</td>
                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
                    </tr>
                    <tr>
                        <td>http.socket.timeout.sender</td>
                        <td>
                            Sets the timeout in milliseconds for all the TCP sockets opened by the
                            transport sender. This overrides the value of
                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
                            sender.
                            <div class="xmlConf">http.socket.timeout.sender=20000</div>
                        </td>
                        <td>No</td>
                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
                    </tr>
                    <tr>
                        <td>http.connection.timeout</td>
                        <td>
                            Sets the TCP connection timeout in milliseconds. This determines the timeout
                            value for non-blocking connection requests. Setting this property to
                            0 disables connection timeout (i.e. no timeout).
                            <div class="xmlConf">http.connection.timeout=30000</div>
                        </td>
                        <td>No</td>
                        <td>0</td>
                    </tr>
                    <tr>
                        <td>http.nio.interest-ops-queueing</td>
                        <td>
                            Determines whether or not I/O interest operations are to be queued and
                            executed asynchronously by the I/O reactor thread or to be applied to
                            the underlying
                            <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/channels/SelectionKey.html">SelectionKey</a>
                            immediately. Allowed values are either 'true' or 'false'.
                            <div class="xmlConf">http.nio.interest-ops-queueing=false</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>http.tcp.nodelay</td>
                        <td>
                            Setting this property to 'true' disables
                            <a href="http://en.wikipedia.org/wiki/Nagle's_algorithm">Nagle's algorithm</a>
                            for the HTTP connections. That is, outgoing data will not be buffered
                            and aggregated together
                            (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#TCP_NODELAY">TCP_NODELAY</a>).
                            <div class="xmlConf">http.tcp.nodelay=true</div>
                        </td>
                        <td>No</td>
                        <td>true</td>
                    </tr>
                    <tr>
                        <td>http.socket.buffer-size</td>
                        <td>
                            Sets the size of the I/O session buffers (in bytes) used by the transport
                            for reading incoming data and writing outgoing data.
                            <div class="xmlConf">http.socket.buffer-size=4096</div>
                        </td>
                        <td>No</td>
                        <td>8192</td>
                    </tr>
                    <tr>
                        <td>http.socket.rcv-buffer-size</td>
                        <td>
                            Sets the size of the buffers (in bytes) used by the underlying platform
                            for incoming network I/O. This value is only a hint. When set, this is a
                            suggestion to the OS kernel from Synapse about the size of buffers to
                            use for the data to be received over the socket
                            (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_RCVBUF">SO_RCVBUF</a>).
                            <div class="xmlConf">http.socket.rcv-buffer-size=4096</div>
                        </td>
                        <td>No</td>
                        <td>8192</td>
                    </tr>
                    <tr>
                        <td>http.socket.snd-buffer-size</td>
                        <td>
                            Sets the size of the buffers (in bytes) used by the underlying platform
                            for outgoing network I/O. This value is only a hint. When set, this is a
                            suggestion to the OS kernel from Synapse about the size of buffers to
                            use for the data to be sent over the socket
                            (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_SNDBUF">SO_SNDBUF</a>).
                            <div class="xmlConf">http.socket.snd-buffer-size=4096</div>
                        </td>
                        <td>No</td>
                        <td>8192</td>
                    </tr>
                    <tr>
                        <td>http.socket.linger</td>
                        <td>
                            Specifies the linger-on-close timeout duration (in milliseconds) for the
                            sockets created by the HTTP transport. Setting to 0 or a negative value
                            disables linger-on-close
                            (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_LINGER">SO_LINGER</a>).
                            <div class="xmlConf">http.socket.linger=5000</div>
                        </td>
                        <td>No</td>
                        <td>-1</td>
                    </tr>
                    <tr>
                        <td>http.socket.reuseaddr</td>
                        <td>
                            Sets the <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_REUSEADDR">SO_REUSEADDR</a>
                            socket option for the sockets created by the HTTP transport. Accepted
                            values are either 'true' or 'false'.
                            <div class="xmlConf">http.socket.reuseaddr=true</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>http.nio.select-interval</td>
                        <td>
                            Sets the time interval in milliseconds at which the I/O reactor wakes up
                            to check for timed out sessions and session requests.
                            <div class="xmlConf">http.nio.select-interval=2500</div>
                        </td>
                        <td>No</td>
                        <td>1000</td>
                    </tr>
                    <tr>
                        <td>io_threads_per_reactor <a name="io_threads_per_reactor"/></td>
                        <td>
                            Sets the number of I/O dispatcher threads to be used by each I/O reactor.
                            Typically, this property controls the ability of the HTTP transport
                            to handle concurrent I/O events.
                            It is recommended that this property is set to the number of CPU cores
                            available for Synapse. By default, Synapse determines the number of
                            available CPU cores and initializes this setting accordingly.
                            <div class="xmlConf">io_threads_per_reactor=4</div>
                        </td>
                        <td>No</td>
                        <td>Number of CPU cores</td>
                    </tr>
                    <tr>
                        <td>http.malformed.input.action</td>
                        <td>
                            Specifies the action to be performed when a malformed input is detected
                            during character set encoding or decoding. Supported values are
                            'ignore', 'replace' and 'report'. See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/charset/CodingErrorAction.html">CodingErrorAction</a>
                            for more details on each of these options.
                            <div class="xmlConf">http.malformed.input.action=ignore</div>
                        </td>
                        <td>No</td>
                        <td>report</td>
                    </tr>
                    <tr>
                        <td>http.unmappable.input.action</td>
                        <td>
                            Specifies the action to be performed when an un-mappable character is detected
                            during character set encoding or decoding. Supported values are
                            'ignore', 'replace' and 'report'. See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/charset/CodingErrorAction.html">CodingErrorAction</a>
                            for more details on each of these options.
                            <div class="xmlConf">http.malformed.input.action=ignore</div>
                        </td>
                        <td>No</td>
                        <td>report</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
            <subsection name="Synapse HTTP Mediation Settings" id="SynapseSettings">
                <p>
                    Following settings determine the behavior of Synapse with respect to mediating
                    HTTP traffic.
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>nhttp_buffer_size</td>
                        <td>
                            Sets the size of the I/O buffers (in bytes) used to receive incoming
                            message data and write outgoing message data.
                            <div class="xmlConf">io_buffer_size=10240</div>
                        </td>
                        <td>No</td>
                        <td>8192</td>
                    </tr>
                    <tr>
                        <td>http.user.agent.preserve <a name="http.user.agent.preserve"/></td>
                        <td>
                            Specifies whether Synapse should preserve the User-Agent header sent by the
                            client applications, when forwarding messages to backend servers. Allowed
                            values are either true or false. If set to false, Synapse will overwrite
                            the original User-Agent header value with the string 'Synapse-HttpComponents-NIO'.
                            <a href="#http.user.agent.value">http.user.agent.value</a> property.
                            <div class="xmlConf">http.user.agent.preserve=true</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>http.server.preserve <a name="http.server.preserve"/></td>
                        <td>
                            Specifies whether Synapse should preserve the Server header sent by the
                            backend servers, when forwarding messages to client applications. Allowed
                            values are either true or false. If set to false, Synapse will overwrite
                            the original Server header value with the string 'Synapse-HttpComponents-NIO'.
                            <div class="xmlConf">http.server.preserve=false</div>
                        </td>
                        <td>No</td>
                        <td>true</td>
                    </tr>
                    <tr>
                        <td>nhttp_disabled_methods</td>
                        <td>
                            A comma separated list of HTTP methods that should be disabled. That is,
                            HTTP methods in this list will not be handled by the transport listeners.
                            Any attempt to invoke a disabled HTTP method will trigger an exception.
                            <div class="xmlConf">nhttp_disabled_methods=PUT,DELETE</div>
                        </td>
                        <td>No</td>
                        <td>N/A</td>
                    </tr>
                    <tr>
                        <td>http.connection.disable.keepalive</td>
                        <td>
                            Determines whether the transport sender should use keep-alive for
                            outbound HTTP connections. If set to true, Synapse will send outgoing
                            requests with the 'Connection: close' header, indicating that connection
                            should not be kept alive after the HTTP interaction is complete.
                            <div class="xmlConf">http.connection.disable.keepalive=true</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                    <tr>
                        <td>http.count.connections</td>
                        <td>
                            Determines whether Synapse should keep track of the HTTP connections
                            established with target hosts. This information can be later accessed
                            via JMX (ConnectionsView).
                            <div class="xmlConf">http.count.connections=true</div>
                        </td>
                        <td>No</td>
                        <td>false</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
            <subsection name="Thread Pool Settings" id="ThreadPoolSettings">
                <p>
                    The NHTTP transport uses two separate thread pools for mediating HTTP requests
                    and responses through the Synapse mediation engine. The size of these thread
                    pools determine the capacity of Synapse to handle concurrent HTTP traffic. Use
                    the following properties to fine tune these thread pools according to your
                    expected workload.
                </p>
                <p>
                    <strong>HTTP Request Thread Pool</strong>
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>snd_t_core <a name="snd_t_core"/></td>
                        <td>
                            Set the core size of the thread pool used by the NHTTP
                            transport. The thread pool starts with 0 threads, and grows in size as
                            new tasks are submitted to it. Once the number of threads reaches or
                            exceeds the core size, the thread pool will not allow the thread count
                            to go below the core size. That is, the thread pool keeps the core amount
                            of threads in the pool even if they are idle.
                            <div class="xmlConf">snd_t_core=100</div>
                        </td>
                        <td>No</td>
                        <td>20</td>
                    </tr>
                    <tr>
                        <td>snd_t_max</td>
                        <td>
                            The thread pools used by the NHTTP transport grow in size, as
                            more and more jobs are submitted to them. This property determines the
                            maximum limit up to which the thread pool may grow. In other words,
                            this property specifies the maximum number of threads that may ever exist
                            in the transport thread pool. Value of this property must be greater than
                            or equal to the value of <a href="#snd_t_core">snd_t_core</a>.
                            <div class="xmlConf">snd_t_core=500</div>
                        </td>
                        <td>No</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>snd_alive_sec</td>
                        <td>
                            Specifies the idle time period (in seconds) for the excess threads in
                            the NHTTP transport thread pool. When the number of threads in the
                            pool is greater than <a href="#snd_t_core">snd_t_core</a>,
                            this is the maximum time that excess idle threads will wait for new tasks
                            before terminating.
                            <div class="xmlConf">snd_alive_sec=10</div>
                        </td>
                        <td>No</td>
                        <td>5</td>
                    </tr>
                    <tr>
                        <td>snd_qlen</td>
                        <td>
                            Determines the length of the queue used by the NHTTP transport
                            thread pool to store pending jobs. To use an unbounded queue, set this
                            property to -1. If a bounded queue is used, and if the queue ever gets
                            filled to its capacity, any further attempts to submit jobs will fail,
                            causing some messages to be dropped by Synapse.
                            <div class="xmlConf">snd_qlen=1000</div>
                        </td>
                        <td>No</td>
                        <td>-1</td>
                    </tr>
                </table>
                <p>
                    <strong>HTTP Response Thread Pool</strong>
                </p>
                <table>
                    <tr>
                        <th>Parameter Name</th>
                        <th>Description/Example</th>
                        <th>Required</th>
                        <th>Default</th>
                    </tr>
                    <tr>
                        <td>lst_t_core <a name="lst_t_core"/></td>
                        <td>
                            Set the core size of the thread pool used by the NHTTP
                            transport. The thread pool starts with 0 threads, and grows in size as
                            new tasks are submitted to it. Once the number of threads reaches or
                            exceeds the core size, the thread pool will not allow the thread count
                            to go below the core size. That is, the thread pool keeps the core amount
                            of threads in the pool even if they are idle.
                            <div class="xmlConf">lst_t_core=100</div>
                        </td>
                        <td>No</td>
                        <td>20</td>
                    </tr>
                    <tr>
                        <td>lst_t_max</td>
                        <td>
                            The thread pools used by the NHTTP transport grow in size, as
                            more and more jobs are submitted to them. This property determines the
                            maximum limit up to which the thread pool may grow. In other words,
                            this property specifies the maximum number of threads that may ever exist
                            in the transport thread pool. Value of this property must be greater than
                            or equal to the value of <a href="#lst_t_core">lst_t_core</a>.
                            <div class="xmlConf">lst_t_core=500</div>
                        </td>
                        <td>No</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>lst_alive_sec</td>
                        <td>
                            Specifies the idle time period (in seconds) for the excess threads in
                            the NHTTP transport thread pool. When the number of threads in the
                            pool is greater than <a href="#lst_t_core">lst_t_core</a>,
                            this is the maximum time that excess idle threads will wait for new tasks
                            before terminating.
                            <div class="xmlConf">lst_alive_sec=10</div>
                        </td>
                        <td>No</td>
                        <td>5</td>
                    </tr>
                    <tr>
                        <td>lst_qlen</td>
                        <td>
                            Determines the length of the queue used by the NHTTP transport
                            thread pool to store pending jobs. To use an unbounded queue, set this
                            property to -1. If a bounded queue is used, and if the queue ever gets
                            filled to its capacity, any further attempts to submit jobs will fail,
                            causing some messages to be dropped by Synapse.
                            <div class="xmlConf">lst_qlen=1000</div>
                        </td>
                        <td>No</td>
                        <td>-1</td>
                    </tr>
                </table>
                <p><a href="#Contents">[Back to top]</a></p>
            </subsection>
        </section>
        <section name="Logging Configuration" id="Logging">
            <p>
                The NHTTP and Pass Through transports share the same logging framework. Therefore
                both transports support the same exact logging features and configuration options.
                Please refer the <a href="pass_through.html#Logging">Pass Through transport logging
                configuration</a> to learn more about the available features and how to enable them.
            </p>
            <p><a href="#Contents">[Back to top]</a></p>
        </section>
    </body>
</document>