<!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://gitbox.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-2.5.0/index.html">Qpid JMS 2.5.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.&lt;lookup-name&gt; = &lt;connection-uri&gt;</em></li>
<li>To define a Queue, use format: <em>queue.&lt;lookup-name&gt; = &lt;queue-name&gt;</em></li>
<li>To define a Topic use format: <em>topic.&lt;lookup-name&gt; = &lt;topic-name&gt;</em></li>
</ul>

<p>The property values which which constitute the connection URI, queue name, or topic name can also utilise simple <em>${variable}</em> or <em>${variable:-default}</em> expansion, with these resolved in order from system properties, environment variables, or the properties file / environment Hashtable. 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 certain asynchronous send conditions and always send messages from a MessageProducer synchronously. Sends using a CompletionListener are not affected and are implicitly always asynchronous.</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.validateSelector</strong> Controls whether local validation is performed on consumer message selector strings. 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>
<li><strong>jms.tracing</strong> Sets the type name of a tracing provider to use for the connection(s) created by the factory. Supported values are "opentracing" and "noop". Default is unset, effectively noop.</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 allow list and a deny list of Java class or package names.</p>

<p><strong>jms.deserializationPolicy.allowList</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 deny list. 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.denyList</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.
<strong>amqp.anonymousFallbackCacheSize</strong> Controls the number of underlying per-destination fallback sending links that are cached for an anonymous producer to improve performance of sending when a peer doesn't offer support for the anonymous relay. By default only one sender link is cached which means that sending to multiple destinations will cause the cached sender to be closed and new sender to be opened each time the destination changes. Increasing the cache size can reduce the amount of times the cache swapping occurs.  Setting the cache size to zero results in the sender links being closed after each send operation.
<strong>amqp.anonymousFallbackCacheTimeout</strong> Controls how long in milliseconds an underlying per-destination fallback sender link can remain in an anonymous producers cache when inactive before it is automatically closed.  The default is 30000 milliseconds (30 seconds) and can be set to zero to disable the timeouts.</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="tracing">Tracing</h2>

<p>The client can perform distributed tracing of message production and consumption using an <a href="https://opentracing.io/">OpenTracing</a> implementation.</p>

<p>When tracing is enabled, upon producing messages a Span is created for the AMQP delivery process, with the delivery outcome logged on it upon completion. When consuming messages, an active Span is created while the onMessage method of a MessageListener is called. For synchronous receive calls, a Span is created and finished internally while returning a Message. This is also the case for any messages expired before delivery or which exceed the configured redelivery policy.</p>

<p>There are two ways of enabling this support:</p>

<ol>
<li><p>Configure the client via URI option to utilise the <em>GlobalTracer</em> independently set by the application.</p>

<p>The tracing implementation can be enabled using the <em>jms.tracing</em> URI option:</p>

<pre><code>amqp://localhost:5672?jms.tracing=opentracing
</code></pre>

<p>The application must create a Tracer and register it as the GlobalTracer. An overview of doing this would be:</p>

<pre><code>io.opentracing.Tracer tracer = ...;
io.opentracing.util.GlobalTracer.registerIfAbsent(tracer);
</code></pre>

<p>If no registration is performed, the GlobalTracer acts as a no-op Tracer.</p></li>
<li><p>Set a JmsTracer instance to use directly on the JmsConnectionFactory object.</p>

<pre><code>io.opentracing.Tracer tracer = ...;
org.apache.qpid.jms.tracing.JmsTracer jmsTracer =
        org.apache.qpid.jms.tracing.opentracing.OpenTracingTracerFactory.create(tracer);

JmsConnectionFactory connectionFactory = ...;
connectionFactory.setTracer(jmsTracer);
</code></pre>

<p>This method of enabling tracing overrides the URI configuration option if also set.</p></li>
</ol>

<p>In order to perform tracing a suitable OpenTracing implementation must be provided by the application (along with the io.opentracing:opentracing-api and io.opentracing:opentracing-util dependencies, should the tracing implementation not provide them).</p>

<p>An example distributed tracing system would be <a href="https://www.jaegertracing.io/">Jaeger</a>. The related application dependency to utilise it would be:</p>

<pre><code>&lt;dependency&gt;
  &lt;groupId&gt;io.jaegertracing&lt;/groupId&gt;
  &lt;artifactId&gt;jaeger-client&lt;/artifactId&gt;
  &lt;version&gt;${jaeger-version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>

<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>
