# System Properties

The following system properties affect the behaviour of the Qpid JMS client. System properties are global in nature so affect all Qpid interactions made from within the same JVM. For many options, there are equivalent Connection URL options allowing the option to be controlled at the level of the Connection.

System Properties Affecting Connection Behaviour

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.amqp.version | string | 0-10 | Sets the AMQP version to be used - currently supports one of {0-8,0-9,0-91,0-10}. The client will begin negotiation at the specified version and only negotiate downwards if the Broker does not support the specified version.
qpid.heartbeat | int | Defaults to the heartbeat value suggested by the Broker, if any. | Frequency of heartbeat messages (in seconds). A value of 0 disables heartbeating. Two consecutive missed heartbeats will result in the connection timing out. This can also be set per connection using the Connection URL options. For compatibility with old client configuration, the synonym `amqj.heartbeat.delay` is supported.
ignore_setclientID | boolean | false | If a client ID is specified in the connection URL it's used or else an ID is generated. If an ID is specified after it's been set Qpid will throw an exception. Setting this property to 'true' will disable that check and allow you to set a client ID of your choice later on.

Config Options For Session Behaviour

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.dest_syntax | String | ADDR | The default addressing syntax. The Address (ADDR) syntax is supported when using AMQP 0-10. Binding URL (BURL) is supported by AMQP protocols 0-8 through to 0-10.
max_prefetch | int | 500 | Maximum number of pre-fetched messages per Session. This can also be defaulted for sessions created on a particular connection using the Connection URL options.
qpid.use_legacy_map_message | boolean | false | If set will use the old map message encoding. By default the Map messages are encoded using the 0-10 map encoding. This can also be set per connection using the Connection URL options.
qpid.jms.daemon.dispatcher | boolean | false | Controls whether the Session dispatcher thread is a daemon thread or not. If this system property is set to true then the Session dispatcher threads will be created as daemon threads. This setting is introduced in version 0.16.

Config Options For Consumer Behaviour

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.declare_exchanges | Boolean | true | If true, creating a consumer will also declare the exchange on the Broker (specified within the Binding URL associated with the Destination), creating it if is does not already exist.
qpid.declare_queues | Boolean | true | If true, creating a consumer will also declare the queue on the Broker (specified within the Binding URL associated with the Destination), creating it if is does not already exist.
qpid.bind_queues | Boolean | true | If true, creating a consumer will also bind the queue to the to the exchange using the routing key as a binding key. The exchange name, queue name and routing key are taken from the Binding URL associated with the Destination.
qpid.reject.behaviour | String | NORMAL | Used with the maximum delivery count feature. See for details.

Config Options For Producer Behaviour

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.default_mandatory | Boolean | True | If true, messages sent to Queue destinations for which cannot be routed to at least one queue on the Broker, will be returned to the application. See for more details.
qpid.default_mandatory_topic | Boolean | False | If true, messages sent to Topic destinations for which cannot be routed to at least one queue on the Broker, will be returned to the application. See for more details..
qpid.default_immediate | Boolean | False | If true, the message will be returned to the application unless the Broker is able to route the message to at least one queue with a consumer attached. See for more details.
qpid.flow_control_wait_failure | Long | 60000 | Used with . The amount of time (in milliseconds) to wait before timing out.
qpid.flow_control_wait_notify_period | Long | 5000 | Used with . The frequency at which the log message informing that the producer is flow controlled .

Config Options For Threading

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.thread_factory | string | org.apache.qpid.thread.DefaultThreadFactory | Specifies the thread factory to use. If using a real time JVM, you need to set the above property to `org.apache.qpid.thread.RealtimeThreadFactory`.
qpid.rt_thread_priority | int | 20 | Specifies the priority (1-99) for Real time threads created by the real time thread factory.

Config Options For I/O

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.transport | string | org.apache.qpid.transport.network.io.IoNetworkTransport | The transport implementation to be used. A user could specify an alternative transport mechanism that implements the interface `org.apache.qpid.transport.network.OutgoingNetworkTransport`.
qpid.sync_op_timeout | long | 60000 | The length of time (in milliseconds) to wait for a synchronous operation to complete. For compatibility with older clients, the synonym `amqj.default_syncwrite_timeout` is supported.
qpid.tcp_nodelay | boolean | true | Sets the TCP_NODELAY property of the underlying socket. The default was changed to true as of Qpid 0.14. This can also be set per connection using the Connection URL broker option`tcp_nodelay`. options. For compatibility with older clients, the synonym `amqj.tcp_nodelay` is supported.
qpid.send_buffer_size | integer | 65535 | Sets the SO_SNDBUF property of the underlying socket. Added in Qpid 0.16. For compatibility with older clients, the synonym `amqj.sendBufferSize` is supported.
qpid.receive_buffer_size | integer | 65535 | Sets the SO_RCVBUF property of the underlying socket. Added in Qpid 0.16. For compatibility with older clients, the synonym `amqj.receiveBufferSize` is supported.
qpid.failover_method_timeout | long | 60000 | During failover, this is the timeout for each attempt to try to re-establish the connection. If a reconnection attempt exceeds the timeout, the entire failover process is aborted. It is only applicable for AMQP 0-8/0-9/0-9-1 clients.

Config Options For Security - Using SSL for securing connections or using EXTERNAL as the SASL mechanism.

Property Name | Type | Default Value | Description
--- | --- | --- | ---
qpid.ssl_timeout | long | 60000 | Timeout value used by the Java SSL engine when waiting on operations.
qpid.ssl.KeyManagerFactory.algorithm | string | - | The key manager factory algorithm name. If not set, defaults to the value returned from the Java runtime call `KeyManagerFactory.getDefaultAlgorithm()` For compatibility with older clients, the synonym `qpid.ssl.keyStoreCertType` is supported.
qpid.ssl.TrustManagerFactory.algorithm | string | - | The trust manager factory algorithm name. If not set, defaults to the value returned from the Java runtime call `TrustManagerFactory.getDefaultAlgorithm()` For compatibility with older clients, the synonym `qpid.ssl.trustStoreCertType` is supported.

Config Options For Security - Standard JVM properties needed when Using SSL for securing connections or using EXTERNAL as the SASL mechanism.

Qpid allows you to have per connection key and trust stores if required. If specified per connection, the JVM arguments are ignored.

Property Name | Type | Default Value | Description
--- | --- | --- | ---
javax.net.ssl.keyStore | string | jvm default | Specifies the key store path. This can also be set per connection using the Connection URL options.
javax.net.ssl.keyStorePassword | string | jvm default | Specifies the key store password. This can also be set per connection using the Connection URL options.
javax.net.ssl.trustStore | string | jvm default | Specifies the trust store path. This can also be set per connection using the Connection URL options.
javax.net.ssl.trustStorePassword | string | jvm default | Specifies the trust store password. This can also be set per connection using the Connection URL options.