Chapter 5. Configuration options

This chapter lists the available configuration options for AMQ JMS.

JMS configuration options are set as query parameters on the connection URI. For more information, see Section 4.3, “Connection URIs”.

5.1. JMS options

These options control the behaviour of JMS objects such as Connection, Session, MessageConsumer, and MessageProducer.

jms.username
The user name the client uses to authenticate the connection.
jms.password
The password the client uses to authenticate the connection.
jms.clientID
The client ID that the client applies to the connection.
jms.forceAsyncSend
If enabled, all messages from a MessageProducer are sent asynchronously. Otherwise, only certain kinds, such as non-persistent messages or those inside a transaction, are sent asynchronously. It is disabled by default.
jms.forceSyncSend
If enabled, all messages from a MessageProducer are sent synchronously. It is disabled by default.
jms.forceAsyncAcks
If enabled, all message acknowledgments are sent asynchronously. It is disabled by default.
jms.localMessageExpiry
If enabled, any expired messages received by a MessageConsumer are filtered out and not delivered. It is enabled by default.
jms.localMessagePriority
If enabled, prefetched messages are reordered locally based on their message priority value. It is disabled by default.
jms.validatePropertyNames
If enabled, message property names are required to be valid Java identifiers. It is enabled by default.
jms.receiveLocalOnly
If enabled, calls to receive with a timeout argument check a consumer’s local message buffer only. Otherwise, if the timeout expires, the remote peer is checked to ensure there are really no messages. It is disabled by default.
jms.receiveNoWaitLocalOnly
If enabled, calls to receiveNoWait check a consumer’s local message buffer only. Otherwise, the remote peer is checked to ensure there are really no messages available. It is disabled by default.
jms.queuePrefix
An optional prefix value added to the name of any Queue created from a Session.
jms.topicPrefix
An optional prefix value added to the name of any Topic created from a Session.
jms.closeTimeout
The time in milliseconds for which the client waits for normal resource closure before returning. The default is 60000 (60 seconds).
jms.connectTimeout
The time in milliseconds for which the client waits for connection establishment before returning with an error. The default is 15000 (15 seconds).
jms.sendTimeout
The time in milliseconds for which the client waits for completion of a synchronous message send before returning an error. By default the client waits indefinitely for a send to complete.
jms.requestTimeout
The time in milliseconds for which the client waits for completion of various synchronous interactions like opening a producer or consumer (excluding send) with the remote peer before returning an error. By default the client waits indefinitely for a request to complete.
jms.clientIDPrefix
An optional prefix value used to generate client ID values when a new Connection is created by the ConnectionFactory. The default is ID:.
jms.connectionIDPrefix
An optional prefix value used to generate connection ID values when a new Connection is created by the ConnectionFactory. This connection ID is used when logging some information from the Connection object, so a configurable prefix can make breadcrumbing the logs easier. The default is ID:.
jms.populateJMSXUserID
If enabled, populate the JMSXUserID property for each sent message using the authenticated user name from the connection. It is disabled by default.
jms.awaitClientID
If enabled, a connection with no client ID configured in the URI waits for a client ID to be set programmatically, or for confirmation that none can be set, before sending the AMQP connection "open". It is enabled by default.
jms.useDaemonThread
If enabled, a connection uses a daemon thread for its executor, rather than a non-daemon thread. It is disabled by default.
jms.tracing
The name of a tracing provider. Supported values are opentracing and noop. The default is noop.

Prefetch policy options

Prefetch policy determines how many messages each MessageConsumer fetches from the remote peer and holds in a local "prefetch" buffer.

jms.prefetchPolicy.queuePrefetch
The default is 1000.
jms.prefetchPolicy.topicPrefetch
The default is 1000.
jms.prefetchPolicy.queueBrowserPrefetch
The default is 1000.
jms.prefetchPolicy.durableTopicPrefetch
The default is 1000.
jms.prefetchPolicy.all
This can be used to set all prefetch values at once.

The value of prefetch can affect the distribution of messages to multiple consumers on a queue or shared subscription. A higher value can result in larger batches sent at once to each consumer. To achieve more even round-robin distribution, use a lower value.

Redelivery policy options

Redelivery policy controls how redelivered messages are handled on the client.

jms.redeliveryPolicy.maxRedeliveries
Controls when an incoming message is rejected based on the number of times it has been redelivered. A value of 0 indicates that no message redeliveries are accepted. A value of 5 allows a message to be redelivered five times, and so on. The default is -1, meaning no limit.
jms.redeliveryPolicy.outcome
Controls the outcome applied to a message once it has exceeded the configured maxRedeliveries value. Supported values are: ACCEPTED, REJECTED, RELEASED, MODIFIED_FAILED and MODIFIED_FAILED_UNDELIVERABLE. The default value is MODIFIED_FAILED_UNDELIVERABLE.

Message ID policy options

Message ID policy controls the data type of the message ID assigned to messages sent from the client.

jms.messageIDPolicy.messageIDType
By default, a generated String value is used for the message ID on outgoing messages. Other available types are UUID, UUID_STRING, and PREFIXED_UUID_STRING.

Presettle policy options

Presettle policy controls when a producer or consumer instance is configured to use AMQP presettled messaging semantics.

jms.presettlePolicy.presettleAll
If enabled, all producers and non-transacted consumers created operate in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleProducers
If enabled, all producers operate in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleTopicProducers
If enabled, any producer that is sending to a Topic or TemporaryTopic destination operates in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleQueueProducers
If enabled, any producer that is sending to a Queue or TemporaryQueue destination operates in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleTransactedProducers
If enabled, any producer that is created in a transacted Session operates in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleConsumers
If enabled, all consumers operate in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleTopicConsumers
If enabled, any consumer that is receiving from a Topic or TemporaryTopic destination operates in presettled mode. It is disabled by default.
jms.presettlePolicy.presettleQueueConsumers
If enabled, any consumer that is receiving from a Queue or TemporaryQueue destination operates in presettled mode. It is disabled by default.

Deserialization policy options

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

jms.deserializationPolicy.whiteList
A comma-separated list of class and package names that should be allowed when deserializing the contents of an ObjectMessage, unless overridden by blackList. The names in this list are not pattern values. The exact class or package name must be configured, as in java.util.Map or java.util. Package matches include sub-packages. The default is to allow all.
jms.deserializationPolicy.blackList
A comma-separated list of class and package names that should be rejected when deserializing the contents of a ObjectMessage. The names in this list are not pattern values. The exact class or package name must be configured, as in java.util.Map or java.util. Package matches include sub-packages. The default is to prevent none.

5.2. TCP options

When connected to a remote server using plain TCP, the following options specify the behavior of the underlying socket. These options are appended to the connection URI along with any other configuration options.

Example: A connection URI with transport options

amqp://localhost:5672?jms.clientID=foo&transport.connectTimeout=30000

The complete set of TCP transport options is listed below.

transport.sendBufferSize
The send buffer size in bytes. The default is 65536 (64 KiB).
transport.receiveBufferSize
The receive buffer size in bytes. The default is 65536 (64 KiB).
transport.trafficClass
The default is 0.
transport.connectTimeout
The default is 60 seconds.
transport.soTimeout
The default is -1.
transport.soLinger
The default is -1.
transport.tcpKeepAlive
The default is false.
transport.tcpNoDelay
If enabled, do not delay and buffer TCP sends. It is enabled by default.
transport.useEpoll
When available, use the native epoll IO layer instead of the NIO layer. This can improve performance. It is enabled by default.

5.3. SSL/TLS options

The SSL/TLS transport is enabled by using the amqps URI scheme. Because the SSL/TLS transport extends the functionality of the TCP-based transport, all of the TCP transport options are valid on an SSL/TLS transport URI.

Example: A simple SSL/TLS connection URI

amqps://myhost.mydomain:5671

The complete set of SSL/TLS transport options is listed below.

transport.keyStoreLocation
The path to the SSL/TLS key store. If unset, the value of the javax.net.ssl.keyStore system property is used.
transport.keyStorePassword
The password for the SSL/TLS key store. If unset, the value of the javax.net.ssl.keyStorePassword system property is used.
transport.trustStoreLocation
The path to the SSL/TLS trust store. If unset, the value of the javax.net.ssl.trustStore system property is used.
transport.trustStorePassword
The password for the SSL/TLS trust store. If unset, the value of the javax.net.ssl.trustStorePassword system property is used.
transport.keyStoreType
If unset, the value of the javax.net.ssl.keyStoreType system property is used. If the system property is unset, the default is JKS.
transport.trustStoreType
If unset, the value of the javax.net.ssl.trustStoreType system property is used. If the system property is unset, the default is JKS.
transport.storeType
Sets both keyStoreType and trustStoreType to the same value. If unset, keyStoreType and trustStoreType default to the values specified above.
transport.contextProtocol
The protocol argument used when getting an SSLContext. The default is TLS, or TLSv1.2 if using OpenSSL.
transport.enabledCipherSuites
A comma-separated list of cipher suites to enable. If unset, the context-default ciphers are used. Any disabled ciphers are removed from this list.
transport.disabledCipherSuites
A comma-separated list of cipher suites to disable. Ciphers listed here are removed from the enabled ciphers.
transport.enabledProtocols
A comma-separated list of protocols to enable. If unset, the context-default protocols are used. Any disabled protocols are removed from this list.
transport.disabledProtocols
A comma-separated list of protocols to disable. Protocols listed here are removed from the enabled protocol list. The default is SSLv2Hello,SSLv3.
transport.trustAll
If enabled, trust the provided server certificate implicitly, regardless of any configured trust store. It is disabled by default.
transport.verifyHost
If enabled, verify that the connection hostname matches the provided server certificate. It is enabled by default.
transport.keyAlias
The alias to use when selecting a key pair from the key store if required to send a client certificate to the server.
transport.useOpenSSL

If enabled, use native OpenSSL libraries for SSL/TLS connections if available. It is disabled by default.

For more information, see Section 7.1, “Enabling OpenSSL support”.

5.4. AMQP options

The following options apply to aspects of behavior related to the AMQP wire protocol.

amqp.idleTimeout
The time in milliseconds after which the connection is failed if the peer sends no AMQP frames. The default is 60000 (1 minute).
amqp.vhost
The virtual host to connect to. This is used to populate the SASL and AMQP hostname fields. The default is the main hostname from the connection URI.
amqp.saslLayer
If enabled, SASL is used when establishing connections. It is enabled by default.
amqp.saslMechanisms
A comma-separated list of SASL mechanisms the client should allow selection of, if offered by the server and usable with the configured credentials. The supported mechanisms are EXTERNAL, SCRAM-SHA-256, SCRAM-SHA-1, CRAM-MD5, PLAIN, ANONYMOUS, and GSSAPI for Kerberos. The default is to allow selection from all mechanisms except GSSAPI, which must be explicitly included here to enable.
amqp.maxFrameSize
The maximum AMQP frame size in bytes allowed by the client. This value is advertised to the remote peer. The default is 1048576 (1 MiB).
amqp.drainTimeout
The time in milliseconds that the client waits for a response from the remote peer when a consumer drain request is made. If no response is seen in the allotted timeout period, the link is considered failed and the associated consumer is closed. The default is 60000 (1 minute).
amqp.allowNonSecureRedirects
If enabled, allow AMQP redirects to alternative hosts when the existing connection is secure and the alternative connection is not. For example, if enabled this would permit redirecting an SSL/TLS connection to a raw TCP connection. It is disabled by default.

5.5. Failover options

Failover URIs start with the prefix failover: and contain a comma-separated list of connection URIs inside parentheses. Additional options are specified at the end. Options prefixed with jms. are applied to the overall failover URI, outside of parentheses, and affect the Connection object for its lifetime.

Example: A failover URI with failover options

failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&failover.maxReconnectAttempts=20

The individual broker details within the parentheses can use the transport. or amqp. options defined earlier. These are applied as each host is connected to.

Example: A failover URI with per-connection transport and AMQP options

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

All of the configuration options for failover are listed below.

failover.initialReconnectDelay
The time in milliseconds the client waits before the first attempt to reconnect to a remote peer. The default is 0, meaning the first attempt happens immediately.
failover.reconnectDelay
The time in milliseconds between reconnection attempts. If the backoff option is not enabled, this value remains constant. The default is 10.
failover.maxReconnectDelay
The maximum time that the client waits before attempting to reconnect. This value is only used when the backoff feature is enabled to ensure that the delay does not grow too large. The default is 30 seconds.
failover.useReconnectBackOff
If enabled, the time between reconnection attempts grows based on a configured multiplier. It is enabled by default.
failover.reconnectBackOffMultiplier
The multiplier used to grow the reconnection delay value. The default is 2.0.
failover.maxReconnectAttempts
The number of reconnection attempts allowed before reporting the connection as failed to the client. The default is -1, meaning no limit.
failover.startupMaxReconnectAttempts
For a client that has never connected to a remote peer before, this option controls how many attempts are made to connect before reporting the connection as failed. If unset, the value of maxReconnectAttempts is used.
failover.warnAfterReconnectAttempts
The number of failed reconnection attempts until a warning is logged. The default is 10.
failover.randomize
If enabled, the set of failover URIs is randomly shuffled before attempting to connect to one of them. This can help to distribute client connections more evenly across multiple remote peers. It is disabled by default.
failover.amqpOpenServerListAction
Controls how the failover transport behaves when the connection "open" frame from the server provides a list of failover hosts to the client. Valid values are REPLACE, ADD, or IGNORE. If REPLACE is configured, all failover URIs other than the one for the current server are replaced with those provided by the server. If ADD is configured, the URIs provided by the server are added to the existing set of failover URIs, with deduplication. If IGNORE is configured, any updates from the server are ignored and no changes are made to the set of failover URIs in use. The default is REPLACE.

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 URIs. This is accomplished using the same transport. and amqp. URI options outlined earlier for a non-failover broker URI but prefixed with failover.nested.. For example, to apply the same value for the amqp.vhost option to every broker connected to you might have a URI like the following:

Example: A failover URI with shared transport and AMQP options

failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&failover.nested.amqp.vhost=myhost

5.6. Discovery options

The client has an optional discovery module that provides a customized failover layer where the broker URIs to connect to are not given in the initial URI but instead are discovered by interacting with a discovery agent. 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.x brokers that are configured to broadcast their broker addresses for listening clients.

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

Example: A discovery URI

discovery:(<agent-uri>)?discovery.maxReconnectAttempts=20&discovery.discovered.jms.clientID=foo

To use the file watcher discovery agent, create an agent URI like the following:

Example: A discovery URI using the file watcher agent

discovery:(file:///path/to/monitored-file?updateInterval=60000)

The URI options for the file watcher discovery agent are listed below.

updateInterval
The time in milliseconds between checks for file changes. The default is 30000 (30 seconds).

To use the multicast discovery agent with an ActiveMQ 5.x broker, create an agent URI like the following:

Example: A discovery URI using the multicast listener agent

discovery:(multicast://default?group=default)

Note that the use of default 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 can change this to specify the actual IP address and port in use with your multicast configuration.

The URI option for the multicast discovery agent is listed below.

group
The multicast group used to listen for updates. The default is default.