Step 1: Create a single node AMQ broker with any type of storage.
Step 2: Create TestQ1, TestQ2 and TestQ3 in queue-topics.xml as shown below
<addresses xmlns="urn:activemq:core"> <address name="DLQ">
<anycast>
<queue name="DLQ" />
</anycast>
</address>
<address name="EXP">
<anycast>
<queue name="EXP" />
</anycast>
</address> <address name="TestQ1">
<anycast>
<queue name="TestQ1"/>
</anycast>
</address>
<address name="TestQ2">
<anycast>
<queue name="TestQ2"/>
</anycast>
</address>
<address name="TestQ3">
<anycast>
<queue name="TestQ3"/>
</anycast>
</address></addresses>
Step 3: Create address settings in addresses.xml
<address-settings xmlns="urn:activemq:core">
<!-- if you define auto-create on certain queues, management has to be auto-create -->
<address-setting match="activemq.management#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>EXP</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
</address-setting>
<!--default for catch all-->
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>EXP</expiry-address>
<redelivery-delay>0</redelivery-delay>
<!-- with -1 only the global-max-size is in use for limiting -->
<max-size-bytes>-1</max-size-bytes>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>false</auto-create-queues>
<auto-create-addresses>false</auto-create-addresses>
<config-delete-queues>FORCE</config-delete-queues>
<config-delete-addresses>FORCE</config-delete-addresses>
<config-delete-diverts>FORCE</config-delete-diverts>
<redistribution-delay>0</redistribution-delay>
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-addresses>false</auto-delete-addresses>
</address-setting>
<address-setting match="TestQ2">
<expiry-delay>345600000</expiry-delay>
<expiry-address></expiry-address>
</address-setting>
<address-setting match="TestQ1">
<dead-letter-address>TestQ3</dead-letter-address>
</address-setting>
</address-settings>
Step 4: Create diverts in diverts.xml
<diverts xmlns="urn:activemq:core">
<divert name="DIVERT.TestQ1">
<address>TestQ1</address>
<forwarding-address>TestQ2</forwarding-address>
<routing-type>PASS</routing-type>
<exclusive>false</exclusive>
</divert>
</diverts>
Step 5: Create security settings in security.xml
<security-settings xmlns="urn:activemq:core"> <security-setting match="#">
<permission type="consume" roles="amq"/>
<permission type="browse" roles="amq"/>
<permission type="deleteDurableQueue" roles="amq"/>
<permission type="manage" roles="amq"/>
<permission type="createNonDurableQueue" roles="amq"/>
<permission type="deleteAddress" roles="amq"/>
<permission type="createAddress" roles="amq"/>
<permission type="createDurableQueue" roles="amq"/>
<permission type="send" roles="amq"/>
<permission type="deleteNonDurableQueue" roles="amq"/>
</security-setting> <security-setting match="TestQ2">
<permission type="consume" roles="amq"/>
<permission type="browse" roles="amq"/>
<permission type="deleteDurableQueue" roles="amq"/>
<permission type="manage" roles="amq"/>
<permission type="createNonDurableQueue" roles="amq"/>
<permission type="deleteAddress" roles="amq"/>
<permission type="createAddress" roles="amq"/>
<permission type="createDurableQueue" roles="amq"/>
<permission type="send" roles="amq"/>
<permission type="deleteNonDurableQueue" roles="amq"/>
</security-setting> <security-setting match="TestQ1">
<permission type="browse" roles="amq"/>
<permission type="consume" roles="amq"/>
<permission type="send" roles="amq"/>
</security-setting></security-settings>
Step 6: Refer these xml files in broker.xml
<xi:include href="../etc/security.xml"/>
<xi:include href="../etc/addresses.xml"/>
<xi:include href="../etc/queues-topics.xml"/>
<xi:include href="../etc/diverts.xml"/>
Step 7: Start the amq broker
Step 8: Verify that the divert is visible is in the jolokia console under TestQ1
Step 9: Send few messages on the TestQ1
$ ./artemis producer --destination queue:
Step 10: Verify that the messages are diverted to the TestQ2 as well using the jolokia console or the queue stat command.
Step 11: Delete the divert from the diverts.xml but do not delete the diverts tag otherwise it will throw EOF Exception. diverts.xml will look like
<diverts xmlns="urn:activemq:core">
</diverts>
Step 12: Touch broker.xml to reload the configurations
Step 13: broker artemis logs will show that the configurations are reloaded
2021-11-25 10:10:58,351 INFO [org.apache.activemq.artemis.core.server] AMQ221056: Reloading configuration: security
2021-11-25 10:10:58,353 INFO [org.apache.activemq.artemis.core.server] AMQ221056: Reloading configuration: address settings
2021-11-25 10:10:58,353 INFO [org.apache.activemq.artemis.core.server] AMQ221056: Reloading configuration: diverts
Step 14: The divert is still available in the jolokia console
Step 15: Send messages on the TestQ1. The messages are diverted to TestQ2
Step 16: Restart the amq broker.
The divert is still visible on the jolokia console.
Step 17. Send some message on TestQ1, those are diverted to TestQ2
Thus the divert is not deleted.