diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java index b6b3a5c61a..347ac15c2c 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java @@ -251,7 +251,7 @@ public class SimpleAddressManager implements AddressManager { if (binding instanceof QueueBinding) { final QueueBinding queueBinding = (QueueBinding) binding; final RoutingType routingType = queueBinding.getQueue().getRoutingType(); - if (!routingTypes.contains(routingType)) { + if (!routingTypes.contains(routingType) && binding.getAddress().equals(addressName)) { throw ActiveMQMessageBundle.BUNDLE.invalidRoutingTypeDelete(routingType, addressName.toString()); } } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/mqtt/imported/MQTTTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/mqtt/imported/MQTTTest.java index 3026f97849..d8db226609 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/mqtt/imported/MQTTTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/mqtt/imported/MQTTTest.java @@ -39,6 +39,8 @@ import java.util.regex.Pattern; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.core.config.CoreAddressConfiguration; +import org.apache.activemq.artemis.core.config.CoreQueueConfiguration; import org.apache.activemq.artemis.core.protocol.mqtt.MQTTConnectionManager; import org.apache.activemq.artemis.core.protocol.mqtt.MQTTSession; import org.apache.activemq.artemis.core.protocol.mqtt.MQTTUtil; @@ -1898,6 +1900,41 @@ public class MQTTTest extends MQTTTestSupport { assertEquals(payload, new String(message.getPayload())); } + @Test(timeout = 60 * 1000) + public void testBrokerRestartAfterSubHashWithConfigurationQueues() throws Exception { + + // Add some pre configured queues + CoreQueueConfiguration coreQueueConfiguration = new CoreQueueConfiguration(); + coreQueueConfiguration.setName("DLQ"); + coreQueueConfiguration.setRoutingType(RoutingType.ANYCAST); + coreQueueConfiguration.setAddress("DLA"); + + CoreAddressConfiguration coreAddressConfiguration = new CoreAddressConfiguration(); + coreAddressConfiguration.setName("DLA"); + coreAddressConfiguration.addRoutingType(RoutingType.ANYCAST); + coreAddressConfiguration.addQueueConfiguration(coreQueueConfiguration); + + getServer().getConfiguration().getAddressConfigurations().add(coreAddressConfiguration); + + getServer().stop(); + getServer().start(); + getServer().waitForActivation(10, TimeUnit.SECONDS); + + for (int i = 0; i < 2; i++) { + MQTT mqtt = createMQTTConnection("myClient", false); + BlockingConnection connection = mqtt.blockingConnection(); + connection.connect(); + connection.subscribe(new Topic[]{new Topic("#", QoS.AT_MOST_ONCE)}); + connection.disconnect(); + + getServer().stop(); + getServer().start(); + getServer().waitForActivation(10, TimeUnit.SECONDS); + } + + + } + @Test public void testDuplicateIDReturnsError() throws Exception { String clientId = "clientId";