Github user mtaylor commented on the issue:

    https://github.com/apache/activemq-artemis/pull/2392
  
    There are two things at play here.  AMQP raw protocol and extensions to 
AMQP that are broker specific.  
    
    With AMQP raw, there is no such thing as a routing type (this is a broker 
concept).  Therefore messages sent via AMQP to an address should be routed to 
any routing type currently configured on that address.  If an address has a 
single routing type configured e.g. Multicast, the message should be routed 
there, it should not create a new routing type with Anycast, which is what is 
happening here.
    
    Artemis also implements the JMS AMQP extension, which enables additional 
functionality, one of which is the ability to define a sender destination type, 
i.e. Queue or Topic.  These map to Address Anycast and Multicast respectively.  
In this case (with auto-create disabled), if an AMQP client using this 
extension e.g. QPID JMS client, sends explicitly sends to Anycast, but only a 
Multicast address exists, then an error should be returned.
    
    With auto-create enabled for both addresses and queues, the behaviour would 
be different, an Anycast address would be created and no error thrown.   There 
is a special case here, when using the AMQP protocol raw (no extensions), so 
not specifying the routing type, and using auto create addresses.  If the AMQP 
client sends to an address that does not exist, the broker has no way of know 
what type of routing type to create.  In this case, the default routing type 
setting on the address setting is used.
    
    There's another case, which I think is what is happening here.  If there 
exists a Mutlicast address the AMQP client raw sends here and the default 
routing type is Anycast with auto-create enabled.  Instead of routing the 
message to the pre-existing routing type, it is instead trying to auto-create a 
new one.  
    
    



---

Reply via email to