blob: 37f2400c1a7045ece7c62526563c82a1d7a90e5a [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Distributed James Server &mdash; rabbitmq.properties :: Apache James</title>
<meta name="generator" content="Antora 3.1.2">
<link rel="stylesheet" href="../../../_/css/site.css">
</head>
<body class="article">
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item" href="#">Home</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Products</a>
<div class="navbar-dropdown">
<div class="navbar-item"><strong>James server</strong></div>
<a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
<a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
<hr class="navbar-divider">
<a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
<a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
<a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
<a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
<a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Community</a>
<div class="navbar-dropdown">
<!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
<a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
<a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
<a class="navbar-item" href="https://twitter.com/ApacheJames">
<span class="icon">
<svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>
</span> Twitter
</a>
<a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
</div>
</div>
<!-- <div class="navbar-item">
<span class="control">
<a class="button is-primary" href="#">Download</a>
</span>
</div> -->
</div>
</div>
</nav>
</header>
<div class="body">
<div class="nav-container" data-component="james-distributed-app" data-version="3.8.1">
<aside class="nav">
<div class="panels">
<div class="nav-panel-menu is-active" data-panel="menu">
<nav class="nav-menu">
<button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
<h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
<ul class="nav-list">
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../index.html">Distributed James Application</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../objectives.html">Objectives and motivation</a>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../architecture/index.html">Architecture</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../run/index.html">Run</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../run/run-java.html">Run with Java</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-logsMetrics.html">Logs &amp; Metrics</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="index.html">Configuration</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Protocols</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="imap.html">imapserver.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="jmap.html">jmap.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="jmx.html">jmx.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="smtp.html">smtpserver.xml &amp; lmtpserver.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="pop3.html">pop3server.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="webadmin.html">webadmin.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="ssl.html">SSL &amp; TLS</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="sieve.html">Sieve &amp; ManageSieve</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Storage dependencies</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="blobstore.html">blobstore.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="cassandra.html">cassandra.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="opensearch.html">opensearch.properties</a>
</li>
<li class="nav-item is-current-page" data-depth="4">
<a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="redis.html">redis.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="tika.html">tika.properties</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Core components</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="dns.html">dnsservice.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="domainlist.html">domainlist.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailets.html">Packaged Mailets</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="matchers.html">Packaged Matchers</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="search.html">search.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="3">
<button class="nav-item-toggle"></button>
<span class="nav-text">Extensions</span>
<ul class="nav-list">
<li class="nav-item" data-depth="4">
<a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="extensions.html">extensions.properties</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="listeners.html">listeners.xml</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="spam.html">Anti-Spam setup</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="collecting-contacts.html">Contact collection</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="collecting-events.html">Event collection</a>
</li>
<li class="nav-item" data-depth="4">
<a class="nav-link" href="dsn.html">ESMTP DSN support</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../operate/index.html">Operate</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/guide.html">Operator guide</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/performanceChecklist.html">Performance checklist</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/logging.html">Logging</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/metrics.html">Metrics</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../operate/security.html">Security checklist</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../extending/index.html">Extending server behavior</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../extending/imap.html">Custom IMAP processing</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Apache James Distributed Server</span>
<span class="version">3.8.1 SNAPSHOT</span>
</div>
<ul class="components">
<li class="component is-current">
<div class="title"><a href="../index.html">Apache James Distributed Server</a></div>
<ul class="versions">
<li class="version is-current is-latest">
<a href="../index.html">3.8.1 SNAPSHOT</a>
</li>
</ul>
</li>
<li class="component">
<div class="title"><a href="../../../james-project/3.8.1/index.html">Apache James Server</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-project/3.8.1/index.html">3.8.1 SNAPSHOT</a>
</li>
<li class="version">
<a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
</li>
</ul>
</li>
<li class="component">
<div class="title"><a href="../../../james-site/latest/index.html">Apache James Site</a></div>
<ul class="versions">
<li class="version is-latest">
<a href="../../../james-site/latest/index.html">latest</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</div>
<main class="article">
<div class="toolbar" role="navigation">
<button class="nav-toggle"></button>
<a href="../../../james-site/latest/homepage.html" class="home-link"></a>
<nav class="breadcrumbs" aria-label="breadcrumbs">
<ul>
<li><a href="../index.html">Apache James Distributed Server</a></li>
<li><a href="../index.html">Distributed James Application</a></li>
<li><a href="index.html">Configuration</a></li>
<li>Storage dependencies</li>
<li><a href="rabbitmq.html">rabbitmq.properties</a></li>
</ul>
</nav>
<div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/rabbitmq.adoc">Edit this Page</a></div>
</div>
<div class="content">
<aside class="toc sidebar" data-title="Contents" data-levels="2">
<div class="toc-menu"></div>
</aside>
<article class="doc">
<h1 class="page">Distributed James Server &mdash; rabbitmq.properties</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This configuration helps you configure components using RabbitMQ.</p>
</div>
<div class="paragraph">
<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties">example</a>
to get some examples and hints.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_rabbitmq_configuration"><a class="anchor" href="#_rabbitmq_configuration"></a>RabbitMQ Configuration</h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. rabbitmq.properties content</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property name</th>
<th class="tableblock halign-left valign-top">explanation</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">the amqp URI pointing to RabbitMQ server. If you use a vhost, specify it as well at the end of the URI.
Details about amqp URI format is in <a href="https://www.rabbitmq.com/uri-spec.html">RabbitMQ URI Specification</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">management.uri</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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 <a href="https://www.rabbitmq.com/management.html#usage-ui">RabbitMQ Management URI</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">management.user</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">username used to access management service</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">management.password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">password used to access management service</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connection.pool.retries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
Optional integer, defaults to 10</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connection.pool.min.delay.ms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
Optional integer, defaults to 100</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">channel.pool.retries</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
Optional integer, defaults to 3</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">channel.pool.max.delay.ms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
Optional integer, defaults to 30 seconds.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">channel.pool.size</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure the size of the channel pool.
Optional integer, defaults to 3</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Is using ssl enabled
Optional boolean, defaults to false</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.management.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Is using ssl on management api enabled
Optional boolean, defaults to false</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.validation.strategy</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure the validation strategy used for rabbitmq connections. Possible values are default, ignore and override.
Optional string, defaults to using systemwide ssl configuration</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.truststore</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.truststore.password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.hostname.verifier</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure host name verification. Possible options are default and accept_any_hostname
Optional string, defaults to subject alternative name host verifier</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.keystore</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl.keystore.password</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure the keystore password. If configured then "ssl.keystore" must also be configured,
Optional string, defaults to empty string</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quorum.queues.enable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quorum.queues.replication.factor</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Strictly positive integer. The replication factor to use when creating quorum queues.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quorum.queues.delivery.limit</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Strictly positive integer. Value for x-delivery-limit queue parameter, default to none. Setting a delivery limit can
prevent RabbitMQ outage if message processing fails. Read <a href="https://www.rabbitmq.com/docs/quorum-queues#poison-message-handling" class="bare">https://www.rabbitmq.com/docs/quorum-queues#poison-message-handling</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">hosts</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mailqueue.publish.confirm.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether or not to enable publish confirms for the mail queue. Optional boolean, defaults to true.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">event.bus.publish.confirm.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether or not to enable publish confirms for the event bus. Optional boolean, defaults to true.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">event.bus.notification.durability.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether or not the queue backing notifications should be durable. Optional boolean, defaults to true.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">vhost</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional string. This parameter is only a workaround to support invalid URIs containing character like '_'.
You still need to specify the vhost in the uri parameter.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="_tuning_rabbitmq_for_quorum_queue_use"><a class="anchor" href="#_tuning_rabbitmq_for_quorum_queue_use"></a>Tuning RabbitMQ for quorum queue use</h2>
<div class="sectionbody">
<div class="paragraph">
<p>While quorum queues are great at preserving your data and enabling High Availability, they demand more resources and
a greater care than regular RabbitMQ queues.</p>
</div>
<div class="paragraph">
<p>See <a href="https://www.rabbitmq.com/docs/quorum-queues#performance-tuning">this section of RabbitMQ documentation regarding RabbitMQ quroum queue performance tunning</a>.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Provide decent amount of RAM memory to RabbitMQ. 4GB is a good start.</p>
</li>
<li>
<p>Setting a delivery limit is advised as looping messages can cause extreme memory consumptions onto quorum queues.</p>
</li>
<li>
<p>Set up Raft for small messages:</p>
</li>
</ul>
</div>
<div class="literalblock">
<div class="content">
<pre>raft.segment_max_entries = 32768</pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_rabbitmq_mailqueue_configuration"><a class="anchor" href="#_rabbitmq_mailqueue_configuration"></a>RabbitMQ MailQueue Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>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&#8230;&#8203;
One of the mailqueue implementation is using RabbitMQ.
As RabbitMQ doesn&#8217;t offer enough features to implement efficiently all mailqueue operations,
this implementation relies on Cassandra.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 2. rabbitmq.properties content</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property name</th>
<th class="tableblock halign-left valign-top">explanation</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.view.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mailqueue.view.sliceWindow</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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
<a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties">rabbitmq.properties</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mailqueue.view.bucketCount</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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
<a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties">rabbitmq.properties</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mailqueue.view.updateBrowseStartPace</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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
<a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties">rabbitmq.properties</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mailqueue.size.metricsEnabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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
<a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties">rabbitmq.properties</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">notification.queue.ttl</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Configure queue ttl (in ms). References: <a href="https://www.rabbitmq.com/ttl.html#queue-ttl" class="bare">https://www.rabbitmq.com/ttl.html#queue-ttl</a>.
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.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="_rabbitmq_tasks_configuration"><a class="anchor" href="#_rabbitmq_tasks_configuration"></a>RabbitMQ Tasks Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Tasks are WebAdmin triggered long running jobs. RabbitMQ is used to organise their execution in a work queue,
with an exclusive consumer.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 3. rabbitmq.properties content</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Property name</th>
<th class="tableblock halign-left valign-top">explanation</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">task.consumption.enabled</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">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.</p>
<p class="tableblock">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&#8217;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 <a href="https://www.rabbitmq.com/consumers.html#acknowledgement-timeout">here</a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">task.queue.consumer.timeout</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Task queue consumer timeout.</p>
<p class="tableblock">Optional. Duration (support multiple time units cf <code>DurationParser</code>), defaults to 1 day.</p>
<p class="tableblock">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: <a href="https://www.rabbitmq.com/consumers.html#acknowledgement-timeout" class="bare">https://www.rabbitmq.com/consumers.html#acknowledgement-timeout</a>.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</article>
</div>
</main>
</div>
<footer class="footer">
<p>This page was built using the Antora default UI.</p>
<p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
</footer>
<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
<script async src="../../../_/js/vendor/highlight.js"></script>
</body>
</html>