[ 
https://issues.apache.org/jira/browse/ARTEMIS-4787?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850829#comment-17850829
 ] 

Josh Byster edited comment on ARTEMIS-4787 at 5/30/24 6:18 PM:
---------------------------------------------------------------

[~jbertram] I have to clarify with the author what the intended functionality 
was here, since I am under the impression this is potentially a 
misconfiguration (I don't know what the intended behavior was for creating a 
JMS topic and queue). These are not names we can hardcode since the names are 
suffixed with information only known at runtime, so they can't be defined in 
the XML. 
I think we can probably change the client code to correct for the intended 
behavior here to work around, assuming we can preserve what semantics the 
original author intended. So in summary, I'm not sure what the intended use 
case is yet, I just saw logs being spammed with errors when switching from a 
classic to Artemis broker on these address names.


was (Author: josh b):
[~jbertram] I have to clarify with the author what the intended functionality 
was here, since I am under the impression this is potentially a 
misconfiguration (I don't know what the intended behavior was for creating a 
JMS topic and queue). These are not names we can hardcode since the names are 
suffixed with information only known at runtime, so they can't be defined in 
the XML. 
I think we can probably change the client code to correct for the intended 
behavior here to work around, assuming we can preserve what semantics the 
original author intended.

> 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: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to