| = Distributed James Server — rabbitmq.properties |
| :navtitle: rabbitmq.properties |
| |
| This configuration helps you configure components using RabbitMQ. |
| |
| Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[example] |
| to get some examples and hints. |
| |
| == RabbitMQ Configuration |
| |
| .rabbitmq.properties content |
| |=== |
| | Property name | explanation |
| |
| | uri |
| | the amqp URI pointing to RabbitMQ server. Details about amqp URI format is in https://www.rabbitmq.com/uri-spec.html[RabbitMQ URI Specification] |
| |
| | management.uri |
| | the URI pointing to RabbitMQ Management Service. James need to retrieve some information about listing queues |
| from this service in runtime. |
| Details about URI format is in https://www.rabbitmq.com/management.html#usage-ui[RabbitMQ Management URI] |
| |
| | management.user |
| | username used to access management service |
| |
| | management.password |
| | password used to access management service |
| |
| | connection.pool.retries |
| | Configure retries count to retrieve a connection. Exponential backoff is performed between each retries. |
| Optional integer, defaults to 10 |
| |
| | connection.pool.min.delay.ms |
| | Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries. |
| Optional integer, defaults to 100 |
| |
| | channel.pool.retries |
| | Configure retries count to retrieve a channel. Exponential backoff is performed between each retries. |
| Optional integer, defaults to 3 |
| |
| | channel.pool.min.delay.ms |
| | Configure initial duration (in ms) between two channel retries. Exponential backoff is performed between each retries. |
| Optional integer, defaults to 50 |
| |
| | channel.pool.size |
| | Configure the size of the channel pool. |
| Optional integer, defaults to 3 |
| |
| | ssl.enabled |
| | Is using ssl enabled |
| Optional boolean, defaults to false |
| |
| | ssl.management.enabled |
| | Is using ssl on management api enabled |
| Optional boolean, defaults to false |
| |
| | ssl.validation.strategy |
| | Configure the validation strategy used for rabbitmq connections. Possible values are default, ignore and override. |
| Optional string, defaults to using systemwide ssl configuration |
| |
| | ssl.truststore |
| | Points to the truststore (PKCS12) used for verifying rabbitmq connection. If configured then "ssl.truststore.password" must also be configured, |
| Optional string, defaults to systemwide truststore. "ssl.validation.strategy: override" must be configured if you want to use this |
| |
| | ssl.truststore.password |
| | Configure the truststore password. If configured then "ssl.truststore" must also be configured, |
| Optional string, defaults to empty string. "ssl.validation.strategy: override" must be configured if you want to use this |
| |
| | ssl.hostname.verifier |
| | Configure host name verification. Possible options are default and accept_any_hostname |
| Optional string, defaults to subject alternative name host verifier |
| |
| | ssl.keystore |
| | Points to the keystore(PKCS12) used for client certificate authentication. If configured then "ssl.keystore.password" must also be configured, |
| Optional string, defaults to empty string |
| |
| | ssl.keystore.password |
| | Configure the keystore password. If configured then "ssl.keystore" must also be configured, |
| Optional string, defaults to empty string |
| |
| | quorum.queues.enable |
| | Boolean. Whether to activate Quorum queue usage for use cases that benefits from it (work queue). |
| Quorum queues enables high availability. |
| False (default value) results in the usage of classic queues. |
| |
| | quorum.queues.replication.factor |
| | Strictly positive integer. The replication factor to use when creating quorum queues. |
| |
| | hosts |
| | Optional, default to the host specified as part of the URI. |
| | Allow creating cluster aware connections. |
| | A coma separated list of hosts, example: hosts=ip1:5672,ip2:5672 |
| |=== |
| |
| == RabbitMQ MailQueue Configuration |
| |
| James mail queue is a component acting like a queue where it can enqueue and dequeue mails. |
| Beside of the basic features, it also allows some extra operations like getting size, browsing all items in the mail queue... |
| One of the mailqueue implementation is using RabbitMQ. |
| As RabbitMQ doesn't offer enough features to implement efficiently all mailqueue operations, |
| this implementation relies on Cassandra. |
| |
| .rabbitmq.properties content |
| |=== |
| | Property name | explanation |
| |
| | cassandra.view.enabled |
| | Whether the Cassandra administrative view should be activated. Boolean value defaulting to true. |
| Not necessarily needed for MDA deployments, mail queue management adds significant complexity. |
| |
| |
| | mailqueue.view.sliceWindow |
| | James divides the view into slices, each slice contains data for a given period, sliceWindow parameter controls this period. |
| This dividing of periods allows faster browsing of the mail queue. Tips for choosing sliceWindow are explained in |
| https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[rabbitmq.properties] |
| |
| | mailqueue.view.bucketCount |
| | Mails in a mail queue are distributed across the underlying storage service. |
| BucketCount describes how to be distributing mails to fit with your James setup |
| Tips for choosing bucketCount are explained in |
| https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[rabbitmq.properties] |
| |
| | mailqueue.view.updateBrowseStartPace |
| | To browse, James needs a starting point and to continuously update that point in runtime. |
| UpdateBrowseStartPace describes the probability to update the starting point. |
| Tips for choosing updateBrowseStartPace are explained in |
| https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[rabbitmq.properties] |
| |
| | mailqueue.size.metricsEnabled |
| | By default, the metrics are disabled for the mail queue size. |
| As computing the size of the mail queue is currently implemented on top of browse operation and thus has a linear complexity, |
| sometimes it can get too big, making it impossible for the ES reporter to handle it correctly without crashing. |
| It can be useful then to disable it. |
| Tips for choosing metricsEnabled are explained in |
| https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[rabbitmq.properties] |
| |
| | notification.queue.ttl |
| | Configure queue ttl (in ms). References: https://www.rabbitmq.com/ttl.html#queue-ttl. |
| This is used only on queues used to share notification patterns, are exclusive to a node. If omitted, it will not add the TTL configure when declaring queues. |
| Optional integer, defaults is 3600000. |
| |
| |=== |
| |
| == RabbitMQ Tasks Configuration |
| |
| Tasks are WebAdmin triggered long running jobs. RabbitMQ is used to organise their execution in a work queue, |
| with an exclusive consumer. |
| |
| .rabbitmq.properties content |
| |=== |
| | Property name | explanation |
| |
| | task.consumption.enabled |
| | Whether to enable task consumption on this node. |
| Disable with caution (this only makes sense in a distributed setup where other nodes consume tasks). |
| Defaults to true. |
| |
| Limitation: Sometimes, some tasks running on James can be very heavy and take a couple of hours to complete. |
| If other tasks are being triggered meanwhile on WebAdmin, they go on the TaskManagerWorkQueue and James unack them, |
| telling RabbitMQ it will consume them later. If they don't get consumed before the consumer timeout setup in |
| RabbitMQ (default being 30 minutes), RabbitMQ closes the channel on an exception. It is thus advised to declare a |
| longer timeout in rabbitmq.conf. More https://www.rabbitmq.com/consumers.html#acknowledgement-timeout[here]. |
| |
| | task.queue.consumer.timeout |
| | Task queue consumer timeout. |
| |
| Optional. Duration (support multiple time units cf `DurationParser`), defaults to 1 day. |
| |
| Required at least RabbitMQ version 3.12 to have effect. |
| This is used to avoid the task queue consumer (which could run very long tasks) being disconnected by RabbitMQ after the default acknowledgement timeout 30 minutes. |
| References: https://www.rabbitmq.com/consumers.html#acknowledgement-timeout. |
| |
| |=== |