Hi Thanks for sharing your findings. I am updating the docs to include your configuration https://cwiki.apache.org/confluence/display/CAMEL/AMQP
On Thu, Apr 30, 2015 at 11:48 PM, Mark Kusec <mku...@mdacorporation.com> wrote: > Following up my own question with an answer: > > I found a solution by following the clues at > https://issues.apache.org/jira/browse/QPID-4991. I gather that ActiveMQ > doesn't internally map AMQP topics to JMS topics unless the destinationName > begins with the prefix "topic://". If this prefix is absent then ActiveMQ > maps your AMQP topic to a JMS queue of the same name. Since the Qpid JMS > connection factory doesn't add this prefix by default, Camel ends up > connecting to queues when it thinks it is connecting to topics. The solution > is to explicitly tell the Qpid connection factory to add the prefix that > ActiveMQ wants to every topic name. The following worked for me: > > <bean id="amqpConnection" > class="org.apache.camel.component.jms.JmsComponent" > > <property name="connectionFactory"> > <bean > class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl" > factory-method="createFromURL"> > <constructor-arg index="0" type="java.lang.String" > value="amqp://localhost:5672" /> > <property name="topicPrefix" value="topic://" /> <!-- only > necessary when connecting to ActiveMQ over AMQP 1.0 --> > </bean> > </property> > </bean> > > I hope this is of assistance to others. > > > -----Original Message----- > From: Mark Kusec > Sent: Thursday, April 30, 2015 10:31 AM > To: users@camel.apache.org > Subject: Camel connects to queue instead of topic when using AMQP 1.0 > > Hi all, I have run into an interesting issue, and I'm not sure whether it is > due to user error or a bug. I'm using Spring XML DSL to setup a subscription > to a topic. But instead of getting a subscription to a topic, I'm actually > getting a consumer on a queue of the same name. > > This only happens if I use AMQP 1.0 (camel-amqp). If I change to OpenWire, I > get a subscription to a topic as I expect. The following illustrates how I > tested this: > > In servlet.xml, I have created two connections to the same instance of > ActiveMQ, one of which uses AMQP and one not: > > <bean id="amqpConnection" > class="org.apache.camel.component.jms.JmsComponent" > > <property name="connectionFactory"> > <bean > class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl" > factory-method="createFromURL"> > <constructor-arg index="0" type="java.lang.String" > value="amqp://localhost:5672" /> > </bean> > </property> > </bean> > > <bean id="tcpConnection" > class="org.apache.camel.component.jms.JmsComponent" > > <property name="connectionFactory"> > <bean class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" > value="tcp://localhost:61616" /> > </bean> > </property> > </bean> > > My routes look like this. I think they should both connect to the same > topic. But in the ActiveMQ hawtio, I can see that " AMQP-ROUTE" is a > consumer of a Queue named "TEST", while "TCP-ROUTE" is a subscriber to a > Topic named "TEST". > > <route id="AMQP-ROUTE"> > <from > uri="amqpConnection:topic://TEST?clientId=TestWithAMQP&durableSubscriptionName=TestDurSysAMQP" > /> > <to uri="file:///foo"/> > </route> > > <route id="TCP-ROUTE"> > <from > uri="tcpConnection:topic://TEST?clientId=TestWithTCP&durableSubscriptionName=TestDurSysTCP" > /> > <to uri="file:///bar"/> > </route> > > Did I do something wrong in specifying the Connection Factory or anything > else? Is there a deficiency in Qpid or camel-amqp? Help! > > P.S. Is there any other/better way to specify an AMQP 1.0 JMS connection > factory in Spring? I searched all over the web, but did not find any other > examples. > > Thanks, > Mark -- Claus Ibsen ----------------- Red Hat, Inc. Email: cib...@redhat.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen hawtio: http://hawt.io/ fabric8: http://fabric8.io/