[ https://issues.apache.org/jira/browse/ARTEMIS-4787?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850847#comment-17850847 ]
Justin Bertram commented on ARTEMIS-4787: ----------------------------------------- The {{multicastPrefix}} and {{anycastPrefix}} settings are used to deduce the routing type based on the prefix already in use by the clients. For example, clients using names {{topic/foo}} and {{queue/bar}} will get multicast or anycast semantics respectively when using {{multicastPrefix=topic/}} and {{anycastPrefix=queue/}}. It won't _add_ a prefix as required for your use-case. Off the top of my head, the only way I can think of to do something like this is with a [broker plugin|https://activemq.apache.org/components/artemis/documentation/latest/broker-plugins.html#plugin-support], specifically an [address plugin|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/ActiveMQServerAddressPlugin.java] and/or a [queue plugin|https://github.com/apache/activemq-artemis/blob/main/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/plugin/ActiveMQServerQueuePlugin.java]. I'm not familiar with the details of your use-case so I'm not 100% sure it will do what you need, but it's my best guess at this point. > Anycast queue does not auto-create if already multicast queue on same address > ----------------------------------------------------------------------------- > > Key: ARTEMIS-4787 > URL: https://issues.apache.org/jira/browse/ARTEMIS-4787 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: Broker > Reporter: Josh Byster > Priority: Major > > As a preface, I am aware that creating both anycast and multicast queues on > the same address is an anti-pattern and not recommended. However, this is > causing difficulties migrating over legacy clients from using Classic to > Artemis. > If one creates a JMS topic on an address, and then tries to create a JMS > queue, it fails to create. However, if the order is flipped (creating a > queue, then a topic), there is no exception. > It seems like the issue is in this area of ServerSessionImpl: > {code:java} > Bindings bindings = > server.getPostOffice().lookupBindingsForAddress(unPrefixedAddress); > if (bindings != null && bindings.hasLocalBinding() && > !queueConfig.isFqqn()) { > // The address has another queue with a different name, which > is fine. Just ignore it. > result = AutoCreateResult.EXISTED; > {code} > Please see test below to reproduce, which throws the exception immediately as > seen in production. > {code:java} > package org.apache.activemq.artemis.tests.integration; > import org.apache.activemq.artemis.api.core.client.ClientSession; > import org.apache.activemq.artemis.api.core.client.ClientSessionFactory; > import org.apache.activemq.artemis.api.core.client.ServerLocator; > import org.apache.activemq.artemis.core.server.ActiveMQServer; > import org.apache.activemq.artemis.core.settings.impl.AddressSettings; > import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; > import org.junit.Before; > import org.junit.Test; > import javax.jms.Connection; > import javax.jms.ConnectionFactory; > import javax.jms.MessageConsumer; > import javax.jms.Queue; > import javax.jms.Session; > import javax.jms.Topic; > import java.util.HashMap; > public class QueueTopicSameNameTest extends ActiveMQTestBase { > protected ActiveMQServer server; > protected ClientSession session; > protected ClientSessionFactory sf; > protected ServerLocator locator; > @Override > @Before > public void setUp() throws Exception { > super.setUp(); > server = createServer(true, createDefaultNettyConfig(), > AddressSettings.DEFAULT_PAGE_SIZE, AddressSettings.DEFAULT_MAX_SIZE_BYTES, > -1, -1, new HashMap<>()); > server.start(); > locator = createInVMNonHALocator(); > sf = createSessionFactory(locator); > session = addClientSession(sf.createSession(false, true, true)); > } > @Test > public void testTopicThenQueueCreate() throws Exception { > String myAddr = "TEST"; > ConnectionFactory cf = new > org.apache.activemq.ActiveMQConnectionFactory("failover:(tcp://localhost:61616)"); > Connection c = cf.createConnection(); > Session s = c.createSession(); > Topic t = s.createTopic(myAddr); > MessageConsumer consumer = s.createConsumer(t); > Queue q = s.createQueue(myAddr); > MessageConsumer otherConsumer = s.createConsumer(q); > c.close(); > } > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@activemq.apache.org For additional commands, e-mail: issues-h...@activemq.apache.org For further information, visit: https://activemq.apache.org/contact