title: Errors when attempting to configure a simple ActiveMQ Artemis cluster
body: <p>I'm in the process of coming up with a simple PoC ActiveMQ Artemis cluster configuration.</p>
  
  <p>It's been pretty good so far getting individual brokers working, but I'm now at the point where I want to have one receive messages (<code>regional</code>) from producers and have those messages handled by consumers connected to the other node (<code>global</code>).</p>
  
  <p>Unfortunately, when I start my <code>regional</code> broker, I end up seeing the following in its logs:</p>
  
  <pre><code>2020-06-12 14:06:59,005 WARN  [org.apache.activemq.artemis.core.server] AMQ222186: unable to authorise cluster control
  </code></pre>
  
  <p>Looking over at the <code>global</code> broker at the same time, it's logging the following:</p>
  
  <pre><code>2020-06-12 14:08:00,524 ERROR [org.apache.activemq.artemis.core.client] AMQ214013: Failed to decode packet: java.lang.NullPointerException
      at org.apache.activemq.artemis.core.server.cluster.ClusterController$ClusterControllerChannelHandler.handlePacket(ClusterController.java:364) [artemis-server-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:720) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:408) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:385) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:667) [artemis-server-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:73) [artemis-core-client-2.13.0.jar:2.13.0]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:321) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:295) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:253) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:437) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at org.apache.activemq.artemis.core.protocol.ProtocolHandler$ProtocolDecoder.channelRead(ProtocolHandler.java:142) [artemis-server-2.13.0.jar:2.13.0]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.13.0.jar:2.13.0]
  
  2020-06-12 14:08:00,525 WARN  [org.apache.activemq.artemis.core.server] AMQ222218: Server disconnecting: Error decoding buffer: java.lang.IllegalStateException: java.lang.NullPointerException
      at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:390) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:667) [artemis-server-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:73) [artemis-core-client-2.13.0.jar:2.13.0]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:321) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:295) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:253) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:437) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at org.apache.activemq.artemis.core.protocol.ProtocolHandler$ProtocolDecoder.channelRead(ProtocolHandler.java:142) [artemis-server-2.13.0.jar:2.13.0]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.48.Final.jar:4.1.48.Final]
      at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.13.0.jar:2.13.0]
  Caused by: java.lang.NullPointerException
      at org.apache.activemq.artemis.core.server.cluster.ClusterController$ClusterControllerChannelHandler.handlePacket(ClusterController.java:364) [artemis-server-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:720) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:408) [artemis-core-client-2.13.0.jar:2.13.0]
      at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:385) [artemis-core-client-2.13.0.jar:2.13.0]
      ... 28 more
  
  2020-06-12 14:08:00,528 WARN  [org.apache.activemq.artemis.core.client] AMQ212037: Connection failure to /172.31.0.5:52646 has been detected: java.lang.NullPointerException [code=GENERIC_EXCEPTION]
  </code></pre>
  
  <hr>
  
  <p>It's likely that I've missed something, but I have gone over the documentation several times and while it's overall good, I don't feel as though it's complete in describing the bare minimum for a working cluster configuration.</p>
  
  <p><code>global</code> <code>broker.xml</code>:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;?xml version='1.0'?&gt;
  &lt;configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"&gt;
  
      &lt;core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq:core "&gt;
  
          &lt;name&gt;0.0.0.0&lt;/name&gt;
  
          &lt;persistence-enabled&gt;true&lt;/persistence-enabled&gt;
  
          &lt;!-- this could be ASYNCIO, MAPPED, NIO
              ASYNCIO: Linux Libaio
              MAPPED: mmap files
              NIO: Plain Java Files
          --&gt;
          &lt;journal-type&gt;ASYNCIO&lt;/journal-type&gt;
  
          &lt;paging-directory&gt;data/paging&lt;/paging-directory&gt;
          &lt;bindings-directory&gt;data/bindings&lt;/bindings-directory&gt;
          &lt;journal-directory&gt;data/journal&lt;/journal-directory&gt;
          &lt;large-messages-directory&gt;data/large-messages&lt;/large-messages-directory&gt;
  
          &lt;journal-datasync&gt;true&lt;/journal-datasync&gt;
          &lt;journal-min-files&gt;2&lt;/journal-min-files&gt;
          &lt;journal-pool-files&gt;10&lt;/journal-pool-files&gt;
          &lt;journal-device-block-size&gt;4096&lt;/journal-device-block-size&gt;
          &lt;journal-file-size&gt;10M&lt;/journal-file-size&gt;
  
          &lt;!--
          This value was determined through a calculation.
          Your system could perform 50 writes per millisecond
          on the current journal configuration.
          That translates as a sync write every 20000 nanoseconds.
          Note: If you specify 0 the system will perform writes directly to the disk.
                  We recommend this to be 0 if you are using journalType=MAPPED and journal-datasync=false.
          --&gt;
          &lt;journal-buffer-timeout&gt;20000&lt;/journal-buffer-timeout&gt;
  
          &lt;!--
          When using ASYNCIO, this will determine the writing queue depth for libaio.
          --&gt;
          &lt;journal-max-io&gt;4096&lt;/journal-max-io&gt;
          &lt;!--
          You can verify the network health of a particular NIC by specifying the &lt;network-check-NIC&gt; element.
              &lt;network-check-NIC&gt;theNicName&lt;/network-check-NIC&gt;
          --&gt;
  
          &lt;!--
          Use this to use an HTTP server to validate the network
              &lt;network-check-URL-list&gt;http://www.apache.org&lt;/network-check-URL-list&gt; --&gt;
  
          &lt;!-- &lt;network-check-period&gt;10000&lt;/network-check-period&gt; --&gt;
          &lt;!-- &lt;network-check-timeout&gt;1000&lt;/network-check-timeout&gt; --&gt;
  
          &lt;!-- this is a comma separated list, no spaces, just DNS or IPs
              it should accept IPV6
              Warning: Make sure you understand your network topology as this is meant to validate if your network is valid.
                      Using IPs that could eventually disappear or be partially visible may defeat the purpose.
                      You can use a list of multiple IPs, and if any successful ping will make the server OK to continue running --&gt;
          &lt;!-- &lt;network-check-list&gt;10.0.0.1&lt;/network-check-list&gt; --&gt;
  
          &lt;!-- use this to customize the ping used for ipv4 addresses --&gt;
          &lt;!-- &lt;network-check-ping-command&gt;ping -c 1 -t %d %s&lt;/network-check-ping-command&gt; --&gt;
  
          &lt;!-- use this to customize the ping used for ipv6 addresses --&gt;
          &lt;!-- &lt;network-check-ping6-command&gt;ping6 -c 1 %2$s&lt;/network-check-ping6-command&gt; --&gt;
  
          &lt;!-- how often we are looking for how many bytes are being used on the disk in ms --&gt;
          &lt;disk-scan-period&gt;5000&lt;/disk-scan-period&gt;
  
          &lt;!-- once the disk hits this limit the system will block, or close the connection in certain protocols
              that won't support flow control. --&gt;
          &lt;max-disk-usage&gt;90&lt;/max-disk-usage&gt;
  
          &lt;!-- should the broker detect dead locks and other issues --&gt;
          &lt;critical-analyzer&gt;true&lt;/critical-analyzer&gt;
          &lt;critical-analyzer-timeout&gt;120000&lt;/critical-analyzer-timeout&gt;
          &lt;critical-analyzer-check-period&gt;60000&lt;/critical-analyzer-check-period&gt;
          &lt;critical-analyzer-policy&gt;HALT&lt;/critical-analyzer-policy&gt;
  
          &lt;page-sync-timeout&gt;1020000&lt;/page-sync-timeout&gt;
  
          &lt;acceptors&gt;
              &lt;!-- Acceptor for every supported protocol --&gt;
              &lt;acceptor name="artemis"&gt;tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true&lt;/acceptor&gt;
  
              &lt;!-- STOMP Acceptor. --&gt;
              &lt;acceptor name="stomp"&gt;tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true&lt;/acceptor&gt;
          &lt;/acceptors&gt;
  
          &lt;cluster-user&gt;cluster&lt;/cluster-user&gt;
          &lt;cluster-password&gt;REDACTED&lt;/cluster-password&gt;
  
          &lt;addresses&gt;
              &lt;address name="/queue/global.regional"&gt;
                  &lt;multicast&gt;
                      &lt;queue name="/queue/global.regional"&gt;
                          &lt;durable&gt;true&lt;/durable&gt;
                      &lt;/queue&gt;
                  &lt;/multicast&gt;
              &lt;/address&gt;
          &lt;/addresses&gt;
  
          &lt;address-settings&gt;
              &lt;!-- if you define auto-create on certain queues, management has to be auto-create --&gt;
              &lt;address-setting match="activemq.management#"&gt;
              &lt;dead-letter-address&gt;DLQ&lt;/dead-letter-address&gt;
              &lt;expiry-address&gt;ExpiryQueue&lt;/expiry-address&gt;
              &lt;redelivery-delay&gt;0&lt;/redelivery-delay&gt;
              &lt;!-- with -1 only the global-max-size is in use for limiting --&gt;
              &lt;max-size-bytes&gt;-1&lt;/max-size-bytes&gt;
              &lt;message-counter-history-day-limit&gt;10&lt;/message-counter-history-day-limit&gt;
              &lt;address-full-policy&gt;PAGE&lt;/address-full-policy&gt;
              &lt;auto-create-queues&gt;true&lt;/auto-create-queues&gt;
              &lt;auto-create-addresses&gt;true&lt;/auto-create-addresses&gt;
              &lt;auto-create-jms-queues&gt;true&lt;/auto-create-jms-queues&gt;
              &lt;auto-create-jms-topics&gt;true&lt;/auto-create-jms-topics&gt;
              &lt;/address-setting&gt;
  
              &lt;!--default for catch all--&gt;
              &lt;address-setting match="#"&gt;
                  &lt;!-- &lt;dead-letter-address&gt;DLQ&lt;/dead-letter-address&gt;
                  &lt;expiry-address&gt;ExpiryQueue&lt;/expiry-address&gt;
                  &lt;redelivery-delay&gt;0&lt;/redelivery-delay&gt; --&gt;
                  &lt;!-- with -1 only the global-max-size is in use for limiting --&gt;
                  &lt;!-- &lt;max-size-bytes&gt;-1&lt;/max-size-bytes&gt;
                  &lt;message-counter-history-day-limit&gt;10&lt;/message-counter-history-day-limit&gt;
                  &lt;address-full-policy&gt;PAGE&lt;/address-full-policy&gt;
                  &lt;auto-create-queues&gt;true&lt;/auto-create-queues&gt;
                  &lt;auto-create-addresses&gt;true&lt;/auto-create-addresses&gt;
                  &lt;auto-create-jms-queues&gt;true&lt;/auto-create-jms-queues&gt;
                  &lt;auto-create-jms-topics&gt;true&lt;/auto-create-jms-topics&gt; --&gt;
              &lt;/address-setting&gt;
          &lt;/address-settings&gt;
  
          &lt;security-settings&gt;
              &lt;security-setting match="#"&gt;
              &lt;permission type="createNonDurableQueue" roles="amq"/&gt;
              &lt;permission type="deleteNonDurableQueue" roles="amq"/&gt;
              &lt;permission type="createDurableQueue" roles="amq"/&gt;
              &lt;permission type="deleteDurableQueue" roles="amq"/&gt;
              &lt;permission type="createAddress" roles="amq"/&gt;
              &lt;permission type="deleteAddress" roles="amq"/&gt;
              &lt;permission type="consume" roles="amq"/&gt;
              &lt;permission type="browse" roles="amq"/&gt;
              &lt;permission type="send" roles="amq"/&gt;
              &lt;!-- we need this otherwise ./artemis data imp wouldn't work --&gt;
              &lt;permission type="manage" roles="amq"/&gt;
              &lt;/security-setting&gt;
          &lt;/security-settings&gt;
  
      &lt;/core&gt;
  &lt;/configuration&gt;
  </code></pre>
  
  <p><code>regional</code> <code>broker.xml</code>:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;?xml version='1.0'?&gt;
  &lt;configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"&gt;
  
      &lt;core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq:core "&gt;
  
          &lt;name&gt;0.0.0.0&lt;/name&gt;
  
          &lt;persistence-enabled&gt;true&lt;/persistence-enabled&gt;
  
          &lt;!-- this could be ASYNCIO, MAPPED, NIO
              ASYNCIO: Linux Libaio
              MAPPED: mmap files
              NIO: Plain Java Files
          --&gt;
          &lt;journal-type&gt;ASYNCIO&lt;/journal-type&gt;
  
          &lt;paging-directory&gt;data/paging&lt;/paging-directory&gt;
          &lt;bindings-directory&gt;data/bindings&lt;/bindings-directory&gt;
          &lt;journal-directory&gt;data/journal&lt;/journal-directory&gt;
          &lt;large-messages-directory&gt;data/large-messages&lt;/large-messages-directory&gt;
  
          &lt;journal-datasync&gt;true&lt;/journal-datasync&gt;
          &lt;journal-min-files&gt;2&lt;/journal-min-files&gt;
          &lt;journal-pool-files&gt;10&lt;/journal-pool-files&gt;
          &lt;journal-device-block-size&gt;4096&lt;/journal-device-block-size&gt;
          &lt;journal-file-size&gt;10M&lt;/journal-file-size&gt;
  
          &lt;!--
          This value was determined through a calculation.
          Your system could perform 50 writes per millisecond
          on the current journal configuration.
          That translates as a sync write every 20000 nanoseconds.
          Note: If you specify 0 the system will perform writes directly to the disk.
                  We recommend this to be 0 if you are using journalType=MAPPED and journal-datasync=false.
          --&gt;
          &lt;journal-buffer-timeout&gt;20000&lt;/journal-buffer-timeout&gt;
  
          &lt;!--
          When using ASYNCIO, this will determine the writing queue depth for libaio.
          --&gt;
          &lt;journal-max-io&gt;4096&lt;/journal-max-io&gt;
          &lt;!--
          You can verify the network health of a particular NIC by specifying the &lt;network-check-NIC&gt; element.
              &lt;network-check-NIC&gt;theNicName&lt;/network-check-NIC&gt;
          --&gt;
  
          &lt;!--
          Use this to use an HTTP server to validate the network
              &lt;network-check-URL-list&gt;http://www.apache.org&lt;/network-check-URL-list&gt; --&gt;
  
          &lt;!-- &lt;network-check-period&gt;10000&lt;/network-check-period&gt; --&gt;
          &lt;!-- &lt;network-check-timeout&gt;1000&lt;/network-check-timeout&gt; --&gt;
  
          &lt;!-- this is a comma separated list, no spaces, just DNS or IPs
              it should accept IPV6
              Warning: Make sure you understand your network topology as this is meant to validate if your network is valid.
                      Using IPs that could eventually disappear or be partially visible may defeat the purpose.
                      You can use a list of multiple IPs, and if any successful ping will make the server OK to continue running --&gt;
          &lt;!-- &lt;network-check-list&gt;10.0.0.1&lt;/network-check-list&gt; --&gt;
  
          &lt;!-- use this to customize the ping used for ipv4 addresses --&gt;
          &lt;!-- &lt;network-check-ping-command&gt;ping -c 1 -t %d %s&lt;/network-check-ping-command&gt; --&gt;
  
          &lt;!-- use this to customize the ping used for ipv6 addresses --&gt;
          &lt;!-- &lt;network-check-ping6-command&gt;ping6 -c 1 %2$s&lt;/network-check-ping6-command&gt; --&gt;
          &lt;!-- how often we are looking for how many bytes are being used on the disk in ms --&gt;
          &lt;disk-scan-period&gt;5000&lt;/disk-scan-period&gt;
          &lt;!-- once the disk hits this limit the system will block, or close the connection in certain protocols
              that won't support flow control. --&gt;
          &lt;max-disk-usage&gt;90&lt;/max-disk-usage&gt;
          &lt;!-- should the broker detect dead locks and other issues --&gt;
          &lt;critical-analyzer&gt;true&lt;/critical-analyzer&gt;
          &lt;critical-analyzer-timeout&gt;120000&lt;/critical-analyzer-timeout&gt;
          &lt;critical-analyzer-check-period&gt;60000&lt;/critical-analyzer-check-period&gt;
          &lt;critical-analyzer-policy&gt;HALT&lt;/critical-analyzer-policy&gt;
          &lt;page-sync-timeout&gt;1020000&lt;/page-sync-timeout&gt;
  
          &lt;acceptors&gt;
              &lt;acceptor name="stomp"&gt;tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true&lt;/acceptor&gt;
          &lt;/acceptors&gt;
  
          &lt;connectors&gt;
              &lt;connector name="global"&gt;tcp://172.17.0.1:61616&lt;/connector&gt;
          &lt;/connectors&gt;
  
          &lt;cluster-user&gt;cluster&lt;/cluster-user&gt;
          &lt;cluster-password&gt;REDACTED&lt;/cluster-password&gt;
  
          &lt;cluster-connections&gt;
              &lt;cluster-connection name="global"&gt;
                  &lt;address&gt;/queue/global.regional&lt;/address&gt;
                  &lt;connector-ref&gt;global&lt;/connector-ref&gt;
                  &lt;forward-when-no-consumers&gt;false&lt;/forward-when-no-consumers&gt;
                  &lt;static-connectors allow-direct-connections-only="true"&gt;
                      &lt;connector-ref&gt;global&lt;/connector-ref&gt;
                  &lt;/static-connectors&gt;
              &lt;/cluster-connection&gt;
          &lt;/cluster-connections&gt;
  
          &lt;addresses&gt;
  
          &lt;/addresses&gt;
  
          &lt;address-settings&gt;
  
              &lt;address-setting match="/queue/global.regional"&gt;
                  &lt;redistribution-delay&gt;0&lt;/redistribution-delay&gt;
              &lt;/address-setting&gt;
  
              &lt;!-- if you define auto-create on certain queues, management has to be auto-create --&gt;
              &lt;address-setting match="activemq.management#"&gt;
                  &lt;dead-letter-address&gt;DLQ&lt;/dead-letter-address&gt;
                  &lt;expiry-address&gt;ExpiryQueue&lt;/expiry-address&gt;
                  &lt;redelivery-delay&gt;0&lt;/redelivery-delay&gt;
                  &lt;!-- with -1 only the global-max-size is in use for limiting --&gt;
                  &lt;max-size-bytes&gt;-1&lt;/max-size-bytes&gt;
                  &lt;message-counter-history-day-limit&gt;10&lt;/message-counter-history-day-limit&gt;
                  &lt;address-full-policy&gt;PAGE&lt;/address-full-policy&gt;
                  &lt;auto-create-queues&gt;true&lt;/auto-create-queues&gt;
                  &lt;auto-create-addresses&gt;true&lt;/auto-create-addresses&gt;
                  &lt;auto-create-jms-queues&gt;true&lt;/auto-create-jms-queues&gt;
                  &lt;auto-create-jms-topics&gt;true&lt;/auto-create-jms-topics&gt;
              &lt;/address-setting&gt;
  
              &lt;!--default for catch all--&gt;
              &lt;address-setting match="#"&gt;
                  &lt;!-- &lt;dead-letter-address&gt;DLQ&lt;/dead-letter-address&gt;
                  &lt;expiry-address&gt;ExpiryQueue&lt;/expiry-address&gt;
                  &lt;redelivery-delay&gt;0&lt;/redelivery-delay&gt; --&gt;
                  &lt;!-- with -1 only the global-max-size is in use for limiting --&gt;
                  &lt;!-- &lt;max-size-bytes&gt;-1&lt;/max-size-bytes&gt;
                  &lt;message-counter-history-day-limit&gt;10&lt;/message-counter-history-day-limit&gt;
                  &lt;address-full-policy&gt;PAGE&lt;/address-full-policy&gt;
                  &lt;auto-create-queues&gt;true&lt;/auto-create-queues&gt;
                  &lt;auto-create-addresses&gt;true&lt;/auto-create-addresses&gt;
                  &lt;auto-create-jms-queues&gt;true&lt;/auto-create-jms-queues&gt;
                  &lt;auto-create-jms-topics&gt;true&lt;/auto-create-jms-topics&gt; --&gt;
              &lt;/address-setting&gt;
          &lt;/address-settings&gt;
  
          &lt;security-settings&gt;
              &lt;security-setting match="#"&gt;
              &lt;permission type="createNonDurableQueue" roles="amq"/&gt;
              &lt;permission type="deleteNonDurableQueue" roles="amq"/&gt;
              &lt;permission type="createDurableQueue" roles="amq"/&gt;
              &lt;permission type="deleteDurableQueue" roles="amq"/&gt;
              &lt;permission type="createAddress" roles="amq"/&gt;
              &lt;permission type="deleteAddress" roles="amq"/&gt;
              &lt;permission type="consume" roles="amq"/&gt;
              &lt;permission type="browse" roles="amq"/&gt;
              &lt;permission type="send" roles="amq"/&gt;
              &lt;!-- we need this otherwise ./artemis data imp wouldn't work --&gt;
              &lt;permission type="manage" roles="amq"/&gt;
              &lt;/security-setting&gt;
          &lt;/security-settings&gt;
      &lt;/core&gt;
  &lt;/configuration&gt;
  </code></pre>
  
  <p>Would love to know why I'm getting these errors and what's preventing my clustering setup from getting off the ground. </p>
  
  <hr>
  
  References
  
  <ul>
  <li><a href="https://issues.apache.org/jira/projects/ARTEMIS/issues/ARTEMIS-2803" rel="nofollow noreferrer">ActiveMQ Artemis Bug Ticket</a></li>
  </ul>