Looking at your sample, I think your destination name is causing you problems. The “>” character is for pattern matching in the configs and wildcard subscribers - I don’t think wildcard producers are supported. Can you try it with a different destination name? Anything other than “>”.
My sample is Camel route - I’ve pasted the Spring XML file and the unit test for it below. — begin camel-context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.13.0.xsd"> <!-- Create an embedded ActiveMQ Broker --> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="embedded-broker" useJmx="false" persistent="false"> <!-- <destinationInterceptors> <virtualDestinationInterceptor> <virtualDestinations> <virtualTopic name="VirtualTopic.MIGRATION" prefix="Consumer.*.VirtualTopic."/> <virtualTopic name="VirtualTopic.>" prefix="Consumer.*.VirtualTopic."/> <virtualTopic name="VirtualTopic.>" prefix="Consumer.*."/> </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptors> --> </broker> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="brokerURL" value="failover:vm://embedded-broker?create=false"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route id="MIGRATION-consumer"> <from uri="activemq://queue:Consumer.MigrationConsumer.VirtualTopic.MIGRATION" /> <log message="${routeId} received message: ${body}" /> <to uri="mock://MigrationConsumer" /> </route> <route id="other-consumer-one"> <from uri="activemq://queue:Consumer.OtherConsumerOne.VirtualTopic.OTHER" /> <log message="${routeId} received message: ${body}" /> <to uri="mock://OtherConsumerOne" /> </route> <route id="other-consumer-two"> <from uri="activemq://queue:Consumer.OtherConsumerTwo.VirtualTopic.OTHER" /> <log message="${routeId} received message: ${body}" /> <to uri="mock://OtherConsumerTwo" /> </route> <route id="migration-message-producer"> <from uri="direct://migration-message-producer" /> <to uri="activemq://topic:VirtualTopic.MIGRATION" /> </route> <route id="other-message-producer"> <from uri="direct://other-message-producer" /> <to uri="activemq://topic:VirtualTopic.OTHER" /> </route> </camelContext> </beans> — end camel-context.xml —begin RouteTest.java package com.pronoia.camel; import java.util.concurrent.TimeUnit; import org.apache.camel.EndpointInject; import org.apache.camel.Produce; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.NotifyBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.spring.CamelSpringTestSupport; import org.junit.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RouteTest extends CamelSpringTestSupport{ @Produce( uri = "direct://migration-message-producer") ProducerTemplate migrationProducer; @Produce( uri = "direct://other-message-producer") ProducerTemplate otherProducer; @EndpointInject( uri = "mock://MigrationConsumer") MockEndpoint migrationConsumer; @EndpointInject( uri = "mock://OtherConsumerOne") MockEndpoint otherConsumerOne; @EndpointInject( uri = "mock://OtherConsumerTwo") MockEndpoint otherConsumerTwo; @Override protected AbstractApplicationContext createApplicationContext() { return new ClassPathXmlApplicationContext( "META-INF/spring/camel-context.xml"); } @Override public boolean isUseAdviceWith() { return true; } @Test public void testRoute() throws Exception { String migrationMessagePrefix = "Migration Message "; String otherMessagePrefix = "Other Message "; int migrationMessageCount = 5; int otherMessageCount = 10; NotifyBuilder notifyMigrationProducer = new NotifyBuilder(context).from("direct://migration-message-producer").whenReceived(migrationMessageCount).create(); NotifyBuilder notifyOtherProducer = new NotifyBuilder(context).from("direct://other-message-producer").whenReceived(otherMessageCount).create(); migrationConsumer.expectedMessageCount( migrationMessageCount ); otherConsumerOne.expectedMessageCount( otherMessageCount ); otherConsumerTwo.expectedMessageCount( otherMessageCount ); migrationConsumer.allMessages().body().startsWith(migrationMessagePrefix); otherConsumerOne.allMessages().body().startsWith(otherMessagePrefix); otherConsumerOne.allMessages().body().startsWith(otherMessagePrefix); context.start(); for( int i=1; i<= migrationMessageCount; ++i ) { migrationProducer.sendBody( migrationMessagePrefix + i ); } for( int i=1; i<= otherMessageCount; ++i ) { otherProducer.sendBody( otherMessagePrefix + i ); } assertTrue("All migration messages were not sent", notifyMigrationProducer.matches(5, TimeUnit.SECONDS)); assertTrue("All other messages were not sent", notifyOtherProducer.matches(5, TimeUnit.SECONDS)); assertMockEndpointsSatisfied(); } } — end RouteTest.java > On Mar 15, 2016, at 7:26 PM, Nuno Oliveira <nuno.olive...@geo-solutions.it> > wrote: > > Thank you for the feedback. > > I have created a simple test case for this based on one of the ActiveMQ basic > examples (attached to this mail - App.java). > > I create two producers, one that will send messages to virtual topic > VirtualTopic.> and another > one that will send messages to virtual topic VirtualTopic.MIGRATION. > > And I create two consumers, one that will consume from queue > Consumer.ConsumerA.VirtualTopic.> and another > one that will consume from queue Consumer.ConsumerB.VirtualTopic.MIGRATION. > > Sending one message to each virtual topic I would expect something like this: > > Consumer 'ConsumerA' received: This message was from topic > 'VirtualTopic.>'. > Consumer 'ConsumerB' received: This message was from topic > 'VirtualTopic.MIGRATION'. > > But I get something like this (the messages are replicated to all queues): > > Consumer 'ConsumerA' received: This message was from topic > 'VirtualTopic.>'. > Consumer 'ConsumerB' received: This message was from topic > 'VirtualTopic.>'. > Consumer 'ConsumerA' received: This message was from topic > 'VirtualTopic.MIGRATION'. > Consumer 'ConsumerB' received: This message was from topic > 'VirtualTopic.MIGRATION'. > > I tested this using the default configuration with ActiveMQ versions 5.9.0 > and 5.13.2. > > You told that you were able to get this behavior with a sample. I would be > very grateful if you could share that sample :) > > Regards, > > Le mardi 15 mars 2016 à 13:36 -0600, Quinn Stevenson a écrit : >> Is there a specific reason the default configuration won’t work for you? >> (Either don’t set anything, or explicitly set the default of >> <virtualTopic name="VirtualTopic.>" prefix="Consumer.*."/> >> >> I tried a simple sample using the defaults, and it seems to accomplish what >> you’re after. >> >>> On Mar 14, 2016, at 11:05 AM, Nuno Oliveira >>> <nuno.olive...@geo-solutions.it> wrote: >>> >>> <virtualTopic name="VirtualTopic.MIGRATION" >>> prefix="Consumer.*.VirtualTopic."/> >>> <virtualTopic name="VirtualTopic.>" >>> prefix="Consumer.*.VirtualTopic."/> >> > -- > == > GeoServer Professional Services from the experts! > Visit http://goo.gl/it488V for more information. > == > Nuno Miguel Carvalho Oliveira > @nmcoliveira > Software Engineer > > GeoSolutions S.A.S. > Via di Montramito 3/A > 55054 Massarosa (LU) > Italy > > phone: +39 0584 962313 > fax: +39 0584 1660272 > mob: +39 333 8128928 > > http://www.geo-solutions.it > http://twitter.com/geosolutions_it > > ------------------------------------------------------- > > AVVERTENZE AI SENSI DEL D.Lgs. 196/2003 > Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i > file/s allegato/i sono > da considerarsi strettamente riservate. Il loro utilizzo è consentito > esclusivamente al destinatario del messaggio, per le finalità indicate > nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il > destinatario, Vi preghiamo cortesemente di darcene notizia via e > -mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal > Vostro sistema. Conservare il messaggio stesso, divulgarlo > anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per > finalità diverse, costituisce comportamento contrario ai > principi dettati dal D.Lgs. 196/2003. > > The information in this message and/or attachments, is intended solely for > the attention and use of > the named addressee(s) and may be confidential or proprietary in nature or > covered by the provisions of privacy act (Legislative Decree > June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in > accord with its purpose, any disclosure, reproduction, copying, > distribution, or either dissemination, either whole or partial, is strictly > forbidden except previous formal approval of the named > addressee(s). If you are not the intended recipient, please contact > immediately the sender by telephone, fax or e-mail and delete the > information in this message that has been received in error. The sender does > not give any warranty or accept liability as the content, > accuracy or completeness of sent messages and accepts no responsibility for > changes made after they were sent or for other risks which > arise as a result of e-mail transmission, viruses, etc. > <App.java>