<!DOCTYPE html>
<!--
 -
 - 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.
 -
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Client configuration - Apache Qpid&#8482;</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
    <script type="text/javascript">var _deferredFunctions = [];</script>
    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
    <!--[if lte IE 8]>
      <link rel="stylesheet" href="/ie.css" type="text/css"/>
      <script type="text/javascript" src="/html5shiv.js"></script>
    <![endif]-->

    <!-- Redirects for `go get` and godoc.org -->
    <meta name="go-import"
          content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
    <meta name="go-source"
          content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
  </head>
  <body>
    <div id="-content">
      <div id="-top" class="panel">
        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>

        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>

        <ul id="-global-navigation">
          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
          <li><a href="/documentation.html">Documentation</a></li>
          <li><a href="/download.html">Download</a></li>
          <li><a href="/discussion.html">Discussion</a></li>
        </ul>
      </div>

      <div id="-menu" class="panel" style="display: none;">
        <div class="flex">
          <section>
            <h3>Project</h3>

            <ul>
              <li><a href="/overview.html">Overview</a></li>
              <li><a href="/components/index.html">Components</a></li>
              <li><a href="/releases/index.html">Releases</a></li>
            </ul>
          </section>

          <section>
            <h3>Messaging APIs</h3>

            <ul>
              <li><a href="/proton/index.html">Qpid Proton</a></li>
              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
            </ul>
          </section>

          <section>
            <h3>Servers and tools</h3>

            <ul>
              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
            </ul>
          </section>

          <section>
            <h3>Resources</h3>

            <ul>
              <li><a href="/dashboard.html">Dashboard</a></li>
              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
              <li><a href="/resources.html">More resources</a></li>
            </ul>
          </section>
        </div>
      </div>

      <div id="-search" class="panel" style="display: none;">
        <form action="http://www.google.com/search" method="get">
          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
          <button type="submit">Search</button>
          <a href="/search.html">More ways to search</a>
        </form>
      </div>

      <div id="-middle" class="panel">
        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-jms-0.38.0/index.html">Qpid JMS 0.38.0</a></li><li>Client configuration</li></ul>

        <div id="-middle-content">
          <h1 id="client-configuration">Client configuration</h1>

<p>This file details various configuration options for the client, such as how to configure and create a JNDI InitialContext, the syntax for its related configuration, and various URI options that can be set when defining a ConnectionFactory.</p>

<h2 id="configuring-a-jndi-initialcontext">Configuring a JNDI InitialContext</h2>

<p>Applications use a JNDI InitialContext, itself obtained from an InitialContextFactory, to look up JMS objects such as ConnectionFactory. The Qpid JMS client provides an implementation of the InitialContextFactory in class <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>. This may be configured and used in three main ways:</p>

<ol>
<li><p>Via jndi.properties file on the Java Classpath.</p>

<p>By including a file named jndi.properties on the Classpath and setting the <em>java.naming.factory.initial</em> property
to value <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>, the Qpid InitialContextFactory implementation will
be discovered when instantiating InitialContext object.</p>

<pre><code>javax.naming.Context ctx = new javax.naming.InitialContext();
</code></pre>

<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured using
properties (the syntax for which is detailed below) either directly within the jndi.properties file,
or in a separate file which is referenced in jndi.properties using the <em>java.naming.provider.url</em> property.</p></li>
<li><p>Via system properties.</p>

<p>By setting the <em>java.naming.factory.initial</em> system property to value <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>,
the Qpid InitialContextFactory implementation will be discovered when instantiating InitialContext object.</p>

<pre><code> javax.naming.Context ctx = new javax.naming.InitialContext();
</code></pre>

<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties in
a file, which is passed using the <em>java.naming.provider.url</em> system property. The syntax for these properties is detailed
below.</p></li>
<li><p>Programmatically using an environment Hashtable.</p>

<p>The InitialContext may also be configured directly by passing an environment during creation:</p>

<pre><code>Hashtable&lt;Object, Object&gt; env = new Hashtable&lt;Object, Object&gt;();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
javax.naming.Context context = new javax.naming.InitialContext(env);
</code></pre>

<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties
(the syntax for which is detailed below), either directly within the environment Hashtable, or in a
separate file which is referenced using the <em>java.naming.provider.url</em> property within the environment Hashtable.</p></li>
</ol>

<p>The property syntax used in the properties file or environment Hashtable is as follows:</p>

<ul>
<li>To define a ConnectionFactory, use format: <em>connectionfactory.lookupName = URI</em></li>
<li>To define a Queue, use format: <em>queue.lookupName = queueName</em></li>
<li>To define a Topic use format: <em>topic.lookupName = topicName</em></li>
</ul>

<p>For more details of the Connection URI, see the next section.</p>

<p>As an example, consider the following properties used to define a ConnectionFactory, Queue, and Topic:</p>

<pre><code>connectionfactory.myFactoryLookup = amqp://localhost:5672
queue.myQueueLookup = queueA
topic.myTopicLookup = topicA
</code></pre>

<p>These objects could then be looked up from a Context as follows:</p>

<pre><code>ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
Queue queue = (Queue) context.lookup("myQueueLookup");
Topic topic = (Topic) context.lookup("myTopicLookup");
</code></pre>

<h2 id="connection-uri">Connection URI</h2>

<p>The basic format of the clients Connection URI is as follows:</p>

<pre><code>  amqp[s]://hostname:port[?option=value[&amp;option2=value...]]
</code></pre>

<p>or for WebSocket connections:</p>

<pre><code> amqpws[s]://hostname:port[/path][?option=value[&amp;option2=value...]]
</code></pre>

<p>Where the <em>amqps</em> and <em>amqpwss</em> scheme is specified to use SSL/TLS, the hostname segment from the URI can be used by the JVM for the
TLS SNI (Server Name Indication) extension in order to communicate the desired server hostname during a TLS handshake.
The SNI extension will be automatically included if a Fully Qualified name (e.g myhost.mydomain) is specified, but not
when an unqualified name (e.g myhost) or bare IP address are used.</p>

<p>The client can be configured with a number of different settings using the URI while defining the ConnectionFactory, these are detailed in the following sections.</p>

<h3 id="jms-configuration-options">JMS Configuration options</h3>

<p>The options apply to the behaviour of the JMS objects such as Connection, Session, MessageConsumer and MessageProducer.</p>

<ul>
<li><strong>jms.username</strong> User name value used to authenticate the connection</li>
<li><strong>jms.password</strong> The password value used to authenticate the connection</li>
<li><strong>jms.clientID</strong> The ClientID value that is applied to the connection.</li>
<li><strong>jms.forceAsyncSend</strong> Configures whether all Messages sent from a MessageProducer are sent asynchronously or only those Message that qualify such as Messages inside a transaction or non-persistent messages.</li>
<li><strong>jms.forceSyncSend</strong> Override all asynchronous send conditions and always sends every Message from a MessageProducer synchronously.</li>
<li><strong>jms.forceAsyncAcks</strong> Causes all Message acknowledgments to be sent asynchronously.</li>
<li><strong>jms.localMessageExpiry</strong> Controls whether MessageConsumer instances will locally filter expired Messages or deliver them.  By default this value is set to true and expired messages will be filtered.</li>
<li><strong>jms.localMessagePriority</strong> If enabled prefetched messages are reordered locally based on their given Message priority value. Default is false.</li>
<li><strong>jms.validatePropertyNames</strong> If message property names should be validated as valid Java identifiers. Default is true.</li>
<li><strong>jms.receiveLocalOnly</strong> If enabled receive calls with a timeout will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available if the local timeout expires before a message arrives. Default is false, the remote is checked.</li>
<li><strong>jms.receiveNoWaitLocalOnly</strong> If enabled receiveNoWait calls will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available. Default is false, the remote is checked.</li>
<li><strong>jms.queuePrefix</strong> Optional prefix value added to the name of any Queue created from a JMS Session.</li>
<li><strong>jms.topicPrefix</strong> Optional prefix value added to the name of any Topic created from a JMS Session.</li>
<li><strong>jms.closeTimeout</strong> Timeout value that controls how long the client waits on resource closure before returning. By default the client waits 60 seconds for a normal close completion event.</li>
<li><strong>jms.connectTimeout</strong> Timeout value that controls how long the client waits on Connection establishment before returning with an error. By default the client waits 15 seconds for a connection to be established before failing.</li>
<li><strong>jms.sendTimeout</strong> Timeout value that controls how long the client waits on completion of a synchronous message send before returning an error. By default the client will wait indefinitely for a send to complete.</li>
<li><strong>jms.requestTimeout</strong> Timeout value that controls how long the client waits on completion of various synchronous interactions, such as opening a producer or consumer, before returning an error. Does not affect synchronous message sends. By default the client will wait indefinitely for a request to complete.</li>
<li><strong>jms.clientIDPrefix</strong> Optional prefix value that is used for generated Client ID values when a new Connection is created for the JMS ConnectionFactory.  The default prefix is 'ID:'.</li>
<li><strong>jms.connectionIDPrefix</strong> Optional prefix value that is used for generated Connection ID values when a new Connection is created for the JMS ConnectionFactory.  This connection ID is used when logging some information from the JMS Connection object so a configurable prefix can make breadcrumbing the logs easier.  The default prefix is 'ID:'.</li>
<li><strong>jms.populateJMSXUserID</strong> Controls whether a MessageProducer will populate the JMSXUserID value for each sent message using the authenticated username from the connection.  This value defaults to false and the JMSXUserID for all sent message will not be populated.</li>
<li><strong>jms.awaitClientID</strong> Controls whether a Connection with no ClientID configured in the URI will wait for a ClientID being set programatically (or the connection being used otherwise to signal none can be set) before sending the AMQP connection Open. Defaults to true.</li>
<li><strong>jms.useDaemonThread</strong> Controls whether a Connection will use a daemon thread for its executor. Defaults to false to ensure a non-daemon thread is present by default.</li>
</ul>

<p>The Prefetch Policy controls how many messages the remote peer can send to the client and be held in a prefetch buffer for each consumer instance.</p>

<ul>
<li><strong>jms.prefetchPolicy.queuePrefetch</strong> defaults to 1000</li>
<li><strong>jms.prefetchPolicy.topicPrefetch</strong> defaults to 1000</li>
<li><strong>jms.prefetchPolicy.queueBrowserPrefetch</strong> defaults to 1000</li>
<li><strong>jms.prefetchPolicy.durableTopicPrefetch</strong> defaults to 1000</li>
<li><strong>jms.prefetchPolicy.all</strong> used to set all prefetch values at once.</li>
</ul>

<p>The Redelivery Policy controls how redelivered messages are handled on the client.</p>

<ul>
<li><strong>jms.redeliveryPolicy.maxRedeliveries</strong> controls when an incoming message is rejected based on the number of times it has been redelivered, the default value is (-1) disabled.  A value of zero would indicate no message redeliveries are accepted, a value of five would allow a message to be redelivered five times, etc.</li>
<li><strong>jms.redeliveryPolicy.outcome</strong> controls the outcome that is applied to a message that is being rejected due to it having exceeded the configured maxRedeliveries value.  This option is configured on the URI using the following set of outcome options:  ACCEPTED, REJECTED, RELEASED, MODIFIED_FAILED and MODIFIED_FAILED_UNDELIVERABLE. The default outcome value is MODIFIED_FAILED_UNDELIVERABLE.</li>
</ul>

<p>The MessageID Policy controls the type of the Message ID assigned to messages sent from the client.</p>

<ul>
<li><strong>jms.messageIDPolicy.messageIDType</strong> By default a generated String value is used for the MessageID on outgoing messages. Other available types are UUID, UUID_STRING, and PREFIXED_UUID_STRING.</li>
</ul>

<p>The Presettle Policy controls when a producer or consumer instance will be configured to use AMQP presettled messaging semantics.</p>

<ul>
<li><strong>jms.presettlePolicy.presettleAll</strong> when true all producers and non-transacted consumers created operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleProducers</strong> when true all producers operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleTopicProducers</strong> when true any producer that is sending to a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleQueueProducers</strong> when true any producer that is sending to a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleTransactedProducers</strong> when true any producer that is created in a transacted Session will operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleConsumers</strong> when true all consumers operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleTopicConsumers</strong> when true any consumer that is receiving from a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.</li>
<li><strong>jms.presettlePolicy.presettleQueueConsumers</strong> when true any consumer that is receiving from a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.</li>
</ul>

<p>The Deserialization Policy provides a means of controlling which types are trusted to be deserialized from the object stream while retrieving the body from an incoming JMS ObjectMessage composed of serialized Java Object content. By default all types are trusted during attempt to deserialize the body. The default Deserialization Policy object provides URI options that allow specifying a whitelist and a blacklist of Java class or package names.</p>

<p><strong>jms.deserializationPolicy.whiteList</strong> A comma separated list of class/package names that should be allowed when deserializing the contents of a JMS ObjectMessage, unless overridden by the blackList. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to allow all.
<strong>jms.deserializationPolicy.blackList</strong> A comma separated list of class/package names that should be rejected when deserializing the contents of a JMS ObjectMessage. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to prevent none.</p>

<h3 id="tcp-transport-configuration-options">TCP Transport Configuration options</h3>

<p>When connected to a remote using plain TCP these options configure the behaviour of the underlying socket.  These options are appended to the connection URI along with the other configuration options, for example:</p>

<pre><code>  amqp://localhost:5672?jms.clientID=foo&amp;transport.connectTimeout=30000
</code></pre>

<p>The complete set of TCP Transport options is listed below:</p>

<ul>
<li><strong>transport.sendBufferSize</strong> default is 64k</li>
<li><strong>transport.receiveBufferSize</strong> default is 64k</li>
<li><strong>transport.trafficClass</strong> default is 0</li>
<li><strong>transport.connectTimeout</strong> default is 60 seconds</li>
<li><strong>transport.soTimeout</strong> default is -1</li>
<li><strong>transport.soLinger</strong> default is -1</li>
<li><strong>transport.tcpKeepAlive</strong> default is false</li>
<li><strong>transport.tcpNoDelay</strong> default is true</li>
<li><strong>transport.useEpoll</strong> When true the transport will use the native Epoll layer when available instead of the NIO layer, which can improve performance. Defaults to true.</li>
<li><strong>transport.useKQueue</strong> When true the transport will use the native KQueue layer when available instead of the NIO layer, which can improve performance. Defaults to false.</li>
</ul>

<h3 id="ssl-transport-configuration-options">SSL Transport Configuration options</h3>

<p>The SSL Transport extends the TCP Transport and is enabled using the <em>amqps</em> URI scheme.  Because the SSL Transport extends the functionality of the TCP based Transport all the TCP Transport options are valid on an SSL Transport URI.</p>

<p>A simple SSL/TLS based client URI is shown below:</p>

<pre><code>amqps://myhost.mydomain:5671
</code></pre>

<p>The complete set of SSL Transport options is listed below:</p>

<ul>
<li><strong>transport.keyStoreLocation</strong>  default is to read from the system property "javax.net.ssl.keyStore"</li>
<li><strong>transport.keyStorePassword</strong>  default is to read from the system property "javax.net.ssl.keyStorePassword"</li>
<li><strong>transport.trustStoreLocation</strong>  default is to read from the system property "javax.net.ssl.trustStore"</li>
<li><strong>transport.trustStorePassword</strong>  default is to read from the system property "javax.net.ssl.trustStorePassword"</li>
<li><strong>transport.keyStoreType</strong> The type of keyStore being used. Default is to read from the system property "javax.net.ssl.keyStoreType" If not set then default is "JKS".</li>
<li><strong>transport.trustStoreType</strong> The type of trustStore being used. Default is to read from the system property "javax.net.ssl.trustStoreType" If not set then default is "JKS".</li>
<li><strong>transport.storeType</strong> This will set both the keystoreType and trustStoreType to the same value. If not set then the keyStoreType and trustStoreType will default to the values specified above.</li>
<li><strong>transport.contextProtocol</strong> The protocol argument used when getting an SSLContext. Default is TLS, or TLSv1.2 if using OpenSSL.</li>
<li><strong>transport.enabledCipherSuites</strong> The cipher suites to enable, comma separated. No default, meaning the context default ciphers are used. Any disabled ciphers are removed from this.</li>
<li><strong>transport.disabledCipherSuites</strong> The cipher suites to disable, comma separated. Ciphers listed here are removed from the enabled ciphers. No default.</li>
<li><strong>transport.enabledProtocols</strong> The protocols to enable, comma separated. No default, meaning the context default protocols are used. Any disabled protocols are removed from this.</li>
<li><strong>transport.disabledProtocols</strong> The protocols to disable, comma separated. Protocols listed here are removed from the enabled protocols. Default is "SSLv2Hello,SSLv3".</li>
<li><strong>transport.trustAll</strong> Whether to trust the provided server certificate implicitly, regardless of any configured trust store. Defaults to false.</li>
<li><strong>transport.verifyHost</strong> Whether to verify that the hostname being connected to matches with the provided server certificate. Defaults to true.</li>
<li><strong>transport.keyAlias</strong> The alias to use when selecting a keypair from the keystore if required to send a client certificate to the server. No default.</li>
<li><strong>transport.useOpenSSL</strong> When true the transport will attempt to use native OpenSSL libraries for SSL connections if possible based on the SSL configuration and available OpenSSL libraries on the classpath.  Refer to the section <a href="#enabling-openssl-support">Enabling OpenSSL support</a> for more information.</li>
</ul>

<h3 id="websocket-transport-configuration-options">Websocket Transport Configuration options</h3>

<p>The WebSocket (WS) Transport extends the TCP and SSL Transports to provide both unsecured and secured Websocket connectivity and is enabled using the <em>amqpws</em> and <em>amqpwss</em> URI schemes.  The unsecured WS Transport extends the basic TCP transport which means all the normal TCP Transport configuration options also apply to the WS Transport. Similarly the WSS Transport extends the SSL Transport which means both the TCP and SSL Transport options can be applied to configure it.</p>

<p>A simple WS[S] based client URI is shown below:</p>

<pre><code>amqpws[s]://myhost.mydomain:5671/[optional-path]
</code></pre>

<p>The WS Transport can be configured to add additional HTTP Headers during the WebSocket upgrade request using URI options for each HTTP header and value to be added, an example is shown below:</p>

<pre><code>amqpws[s]://myhost.mydomain:5671/[optional-path]?transport.ws.httpHeader.&lt;Header&gt;=&lt;Value&gt;
</code></pre>

<h3 id="amqp-configuration-options">AMQP Configuration options</h3>

<p>These options apply to the behaviour of certain AMQP functionality.</p>

<ul>
<li><strong>amqp.idleTimeout</strong> The idle timeout in milliseconds after which the connection will be failed if the peer sends no AMQP frames. Default is 60000.</li>
<li><strong>amqp.vhost</strong> The vhost to connect to. Used to populate the Sasl and Open hostname fields. Default is the main hostname from the Connection URI.</li>
<li><strong>amqp.saslLayer</strong> Controls whether connections should use a SASL layer or not. Default is true.</li>
<li><strong>amqp.saslMechanisms</strong> Which SASL mechanism(s) the client should allow selection of, if offered by the server and usable with the configured credentials. Comma separated if specifying more than 1 mechanism. The clients supported mechanisms are currently EXTERNAL, SCRAM-SHA-256, SCRAM-SHA-1, CRAM-MD5, PLAIN, XOAUTH2, ANONYMOUS, and GSSAPI for Kerberos.  Default is to allow selection from all mechanisms except GSSAPI, which must be specified here to enable.</li>
<li><strong>amqp.maxFrameSize</strong> The connection max-frame-size value in bytes. Default is 1048576.</li>
<li><strong>amqp.drainTimeout</strong> The time in milliseconds that the client will wait for a response from the remote when a consumer drain request is made. If no response is seen in the allotted timeout period the link will be considered failed and the associated consumer will be closed. Default is 60000.</li>
<li><strong>amqp.allowNonSecureRedirects</strong> Controls whether an AMQP connection will allow for a redirect to an alternative host over a connection that is not secure when the existing connection is secure, e.g. redirecting an SSL connection to a raw TCP connection.  This value defaults to false.</li>
</ul>

<h3 id="failover-configuration-options">Failover Configuration options</h3>

<p>With failover enabled the client can reconnect to another server automatically when connection to the current server is lost for some reason.  The failover URI is always initiated with the <em>failover</em> prefix and a list of URIs for the server(s) is contained inside a set of parentheses. The "jms." options are applied to the overall failover URI, outside the parentheses, and affect the JMS Connection object for its lifetime.</p>

<p>The URI for failover looks something like the following:</p>

<pre><code>failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&amp;failover.maxReconnectAttempts=20
</code></pre>

<p>The individual broker details within the parentheses can use the "transport." or "amqp." options defined earlier, with these being applied as each host is connected to:</p>

<pre><code>failover:(amqp://host1:5672?amqp.option=value,amqp://host2:5672?transport.option=value)?jms.clientID=foo
</code></pre>

<p>The complete set of configuration options for failover is listed below:</p>

<ul>
<li><strong>failover.initialReconnectDelay</strong> The amount of time the client will wait before the first attempt to reconnect to a remote peer.  The default value is zero, meaning the first attempt happens immediately.</li>
<li><strong>failover.reconnectDelay</strong> Controls the delay between successive reconnection attempts, defaults to 10 milliseconds.  If the backoff option is not enabled this value remains constant.</li>
<li><strong>failover.maxReconnectDelay</strong> The maximum time that the client will wait before attempting a reconnect.  This value is only used when the backoff feature is enabled to ensure that the delay doesn't not grow too large.  Defaults to 30 seconds as the max time between connect attempts.</li>
<li><strong>failover.useReconnectBackOff</strong> Controls whether the time between reconnection attempts should grow based on a configured multiplier.  This option defaults to true.</li>
<li><strong>failover.reconnectBackOffMultiplier</strong> The multiplier used to grow the reconnection delay value, defaults to 2.0d.</li>
<li><strong>failover.maxReconnectAttempts</strong> The number of reconnection attempts allowed before reporting the connection as failed to the client.  The default is no limit or (-1).</li>
<li><strong>failover.startupMaxReconnectAttempts</strong> For a client that has never connected to a remote peer before this option control how many attempts are made to connect before reporting the connection as failed.  The default is to use the value of maxReconnectAttempts.</li>
<li><strong>failover.warnAfterReconnectAttempts</strong> Controls how often the client will log a message indicating that failover reconnection is being attempted.  The default is to log every 10 connection attempts.</li>
<li><strong>failover.randomize</strong> When true the set of failover URIs is randomly shuffled prior to attempting to connect to one of them.  This can help to distribute client connections more evenly across multiple remote peers.  The default value is false.</li>
<li><strong>failover.amqpOpenServerListAction</strong> Controls how the failover transport behaves when the connection Open frame from the remote peer provides a list of failover hosts to the client.  This option accepts one of three values; REPLACE, ADD, or IGNORE (default is REPLACE).  If REPLACE is configured then all failover URIs other than the one for the current server are replaced with those provided by the remote peer.  If ADD is configured then the URIs provided by the remote are added to the existing set of failover URIs, with de-duplication.  If IGNORE is configured then any updates from the remote are dropped and no changes are made to the set of failover URIs in use.</li>
</ul>

<p>The failover URI also supports defining 'nested' options as a means of specifying AMQP and transport option values applicable to all the individual nested broker URI's, which can be useful to avoid repetition. This is accomplished using the same "transport." and "amqp." URI options outlined earlier for a non-failover broker URI but prefixed with <em>failover.nested.</em>. For example, to apply the same value for the <em>amqp.vhost</em> option to every broker connected to you might have a URI like:</p>

<pre><code>failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&amp;failover.nested.amqp.vhost=myhost
</code></pre>

<h3 id="discovery-configuration-options">Discovery Configuration options</h3>

<p>The client has an optional Discovery module, which provides a customised failover layer where the broker URIs to connect to are not given in the initial URI, but discovered as the client operates via associated discovery agents. There are currently two discovery agent implementations, a file watcher that loads URIs from a file, and a multicast listener that works with ActiveMQ 5 brokers which have been configured to broadcast their broker addresses for listening clients.</p>

<p>The general set of failover related options when using discovery are the same as those detailed earlier, with the main prefix updated from <em>failover.</em> to <em>discovery.</em>, and with the 'nested' options prefix used to supply URI options common to all the discovered broker URIs bring updated from <em>failover.nested.</em> to <em>discovery.discovered</em>. For example, without the agent URI details, a general discovery URI might look like:</p>

<pre><code>discovery:(&lt;agent-uri&gt;)?discovery.maxReconnectAttempts=20&amp;discovery.discovered.jms.clientID=foo
</code></pre>

<p>To use the file watcher discovery agent, utilise an agent URI of the form:</p>

<pre><code>discovery:(file:///path/to/monitored-file?updateInterval=60000)
</code></pre>

<p>The URI options for the file watcher discovery agent are listed below:</p>

<ul>
<li><strong>updateInterval</strong> Controls the frequency in milliseconds which the file is inspected for change. The default value is 30000.</li>
</ul>

<p>To use the multicast discovery agent with an ActiveMQ 5 broker, utilise an agent URI of the form:</p>

<pre><code>discovery:(multicast://default?group=default)
</code></pre>

<p>Note that the use of <em>default</em> as the host in the multicast agent URI above is a special value (that is substituted by the agent with the default "239.255.2.3:6155"). You may change this to specify the actual IP and port in use with your multicast configuration.</p>

<p>The URI options for the multicast discovery agent are listed below:</p>

<ul>
<li><strong>group</strong> Controls which multicast group messages are listened for on. The default value is "default".</li>
</ul>

<h3 id="enabling-openssl-support">Enabling OpenSSL support</h3>

<p>SSL connections can be configured to use a native OpenSSL implementation which can provide increased performance. To use this support the transport <strong><em>useOpenSSL</em></strong> option must be enabled and the OpenSSL support libraries must be configured on the classpath.  The client tests make use of an uber jar containing static libraries for multiple platforms based on Google's boringssl project libraries.  To include this dependency in your own project you might include the maven dependency as follows:</p>

<pre><code>&lt;dependency&gt;
  &lt;groupId&gt;io.netty&lt;/groupId&gt;
  &lt;artifactId&gt;netty-tcnative-boringssl-static&lt;/artifactId&gt;
  &lt;version&gt;${netty-tcnative-version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>

<p>The Netty project provides other options to choose from when using OpenSSL libraries which are documented on the Netty site.  <a href="https://netty.io/wiki/forked-tomcat-native.html">https://netty.io/wiki/forked-tomcat-native.html</a></p>

<h2 id="logging">Logging</h2>

<p>The client makes use of the SLF4J API, allowing users to select a particular logging implementation based on their needs by supplying a SLF4J 'binding', such as <em>slf4j-log4j</em> in order to use Log4J. More details on SLF4J are available from http://www.slf4j.org/.</p>

<p>The client uses Logger names residing within the <em>org.apache.qpid.jms</em> hierarchy, which you can use to configure a logging implementation based on your needs.</p>

<p>When debugging some issues, it may sometimes be useful to enable additional protocol trace logging from the Qpid Proton AMQP 1.0 library. There are two options to achieve this:</p>

<ul>
<li>Set the environment variable (not Java system property) <em>PN_TRACE_FRM</em> to <em>true</em>, which will cause Proton to emit frame logging to stdout.</li>
<li>Add the option <em>amqp.traceFrames=true</em> to your connection URI to have the client add a protocol tracer to Proton, and configure the <em>org.apache.qpid.jms.provider.amqp.FRAMES</em> Logger to <em>TRACE</em> level to include the output in your logs.</li>
</ul>

<h2 id="extended-session-acknowledgement-modes">Extended Session Acknowledgement modes</h2>

<p>The client supports two additional session acknowledgement modes beyond the standard JMS specification modes.</p>

<h3 id="individual-acknowledge">Individual Acknowledge</h3>

<p>In this mode messages must be acknowledged individually by the application via the Message#acknowledge() method used when the Session is in CLIENT_ACKNOWLEDGE mode.  Unlike with CLIENT_ACKNOWLEDGE mode only the target message will be acknowledged, all other delivered messages remain un-acknowledged.  The integer value used to activate this mode is <em>101</em>.</p>

<pre><code>    connection.createSession(false, 101);
</code></pre>

<h3 id="no-acknowledge">No Acknowledge</h3>

<p>In this mode messages are accepted at the server before being dispatched to the client, and no acknowledgement is performed by the client.  The client supports two integer values to activate this mode, <em>100</em> and <em>257</em>.</p>

<pre><code>    connection.createSession(false, 100);
</code></pre>

<h2 id="authenticating-using-kerberos">Authenticating using Kerberos</h2>

<p>The client can be configured to authenticate using Kerberos when used with an appropriately configured server. To do so, you must:</p>

<ol>
<li><p>Configure the client to use the GSSAPI mechanism for SASL authentication using the <em>amqp.saslMechanisms</em> URI option, e.g:</p>

<pre><code>amqp://myhost:5672?amqp.saslMechanisms=GSSAPI
failover:(amqp://myhost:5672?amqp.saslMechanisms=GSSAPI)
</code></pre></li>
<li><p>Set the <em>java.security.auth.login.config</em> system property to the path of a JAAS Login Configuration file containing appropriate configuration for a Kerberos LoginModule, e.g:</p>

<pre><code>-Djava.security.auth.login.config=/path/to/login.config
</code></pre>

<p>An example login.config configuration file might look like the following:</p>

<pre><code>amqp-jms-client {
    com.sun.security.auth.module.Krb5LoginModule required
    useTicketCache=true;
};
</code></pre></li>
</ol>

<p>The precise configuration used will depend on how you wish the credentials to be established for the connection, and the particular LoginModule in use. For details of the Sun/Oracle Krb5LoginModule, see <a href="https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html">https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html</a>. For details of the IBM Java 8 Krb5LoginModule, see <a href="https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html">https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html</a>.</p>

<p>It is possible to configure the LoginModule to establish the credentials to use for the Kerberos process, such as specifying a Principal and whether to use an existing ticket cache or keytab. If however the LoginModule configuration does not provide means to establish all necessary credentials, it may then request and be passed the username and/or password values from the client Connection object if they were either supplied when creating the Connection using the ConnectionFactory or previously configured via its URI options.</p>

<p>Note that Kerberos is only only supported for authentication purposes. Use SSL/TLS connections for encryption.</p>

<p>The following URI options can be used to influence the Kerberos authentication process:</p>

<ul>
<li><strong>sasl.options.configScope</strong> The Login Configuration entry name to use when authenticating. Default is "amqp-jms-client".</li>
<li><strong>sasl.options.protocol</strong> The protocol value used during the GSSAPI SASL process. Default is "amqp".</li>
<li><strong>sasl.options.serverName</strong> The serverName value used during the GSSAPI SASL process. Default is the server hostname from the connection URI.</li>
</ul>

<p>Similar to the "amqp." and "transport." options detailed previously, these options must be specified on a per-host basis or as all-host nested options in a failover URI.</p>


          <hr/>

          <ul id="-apache-navigation">
            <li><a href="http://www.apache.org/">Apache</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
            <li><a href="/security.html">Security</a></li>
            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
          </ul>

          <p id="-legal">
            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
            The Apache Software Foundation; Licensed under
            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
            Proton, Apache, the Apache feather logo, and the Apache Qpid
            project logo are trademarks of The Apache Software
            Foundation; All other marks mentioned may be trademarks or
            registered trademarks of their respective owners
          </p>
        </div>
      </div>
    </div>
  </body>
</html>
