You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Nuno Oliveira <nu...@geo-solutions.it> on 2016/03/14 18:05:50 UTC

Multiple virtual topics and messages routing to consumers

Hi,

I have a doubt regarding virtual topics and how the messages are routed (replicated) to the consumers (queues).

I'm using two virtual topics one with the default name (VirtualTopic.>) and another
one named VirtualTopic.MIGRATION.

I have three consumers (queues):

  * Consumer.2b36ad7a-e641-496d-b319-85000c36d13c.VirtualTopic.>
  * Consumer.e5e60abd-1a66-43f5-8588-842e429b4c5c.VirtualTopic.>
  * Consumer.48ebcaa5-f11b-4de4-a850-2ff45174f83b.VirtualTopic.MIGRATION

My expectation would be that messages send to topic VirtualTopic.> would be send to queues:

  * Consumer.2b36ad7a-e641-496d-b319-85000c36d13c.VirtualTopic.>
  * Consumer.e5e60abd-1a66-43f5-8588-842e429b4c5c.VirtualTopic.>

and that messages send to topic VirtualTopic.MIGRATION would be send to queue:

  * Consumer.48ebcaa5-f11b-4de4-a850-2ff45174f83b.VirtualTopic.MIGRATION

So far I was not able to make things work that way.

I have try different virtual destinations configurations: 

    <destinationInterceptors>
        <virtualDestinationInterceptor>
            <virtualDestinations>
                <virtualTopic name="VirtualTopic.MIGRATION" prefix="Consumer.*.VirtualTopic."/>
                <virtualTopic name="VirtualTopic.>" prefix="Consumer.*.VirtualTopic."/>
            </virtualDestinations>
        </virtualDestinationInterceptor>
    </destinationInterceptors>

but no look. Messages send to topic VirtualTopic.MIGRATION are replicated to queues:

  * Consumer.2b36ad7a-e641-496d-b319-85000c36d13c.VirtualTopic.>
  * Consumer.e5e60abd-1a66-43f5-8588-842e429b4c5c.VirtualTopic.>

but not to queue:

  * Consumer.48ebcaa5-f11b-4de4-a850-2ff45174f83b.VirtualTopic.MIGRATION

The only way I manage to make this work more or less was using some tag in the consumers name and use the 
prefix to filter by that tag. 

This makes me ask, is it not possible to route messages to queues only based on the topic name ?

Unfortunately I cannot change consumers names (that are generated randomly) so using only the prefix is not option.  

I'm using ActiveMQ release version 5.9.0. 

Any comments on this will be appreciated.

Thank you,

Nuno Oliveira

-- 
==
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.


Re: Multiple virtual topics and messages routing to consumers

Posted by Nuno Oliveira <nu...@geo-solutions.it>.
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 <nu...@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 <nu...@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.


Re: Multiple virtual topics and messages routing to consumers

Posted by Quinn Stevenson <qu...@pronoia-solutions.com>.
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 <nu...@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 <nu...@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>


Re: Multiple virtual topics and messages routing to consumers

Posted by Nuno Oliveira <nu...@geo-solutions.it>.
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 <nu...@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.

Re: Multiple virtual topics and messages routing to consumers

Posted by Quinn Stevenson <qu...@pronoia-solutions.com>.
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 <nu...@geo-solutions.it> wrote:
> 
> <virtualTopic name="VirtualTopic.MIGRATION" prefix="Consumer.*.VirtualTopic."/>
>                <virtualTopic name="VirtualTopic.>" prefix="Consumer.*.VirtualTopic."/>