You're right the problem was the > wildcard ... thank you ! Le mercredi 16 mars 2016 à 08:03 -0600, Quinn Stevenson a écrit : > 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.