Hi! We recently started to use the VirtualTopic concept in ActiveMQ <https://activemq.apache.org/virtual-destinations> with the selectorAware attribute set to true, and with /virtualSelectorCacheBrokerPlugin/ to be able to continue receiving selected (filtered) messages in the destination queue even if a consumer if down.
We have producer and consumer services defined with Camel endpoints and running as SpringBoot application . *In activemq.xml:* ... <plugins> <virtualSelectorCacheBrokerPlugin persistFile="${activemq.data}/selectorcache.data"/> </plugins> <destinationInterceptors> <virtualDestinationInterceptor> <virtualDestinations> <virtualTopic name="VirtualTopic.>" prefix="Consumer.*." selectorAware="true"/> </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptors> ... - *In producer, virtual topic is defined with the following Camel URI*: jms.producer.uri=/activemq:topic:VirtualTopic.DeliveryCompletion?connectionFactory=xaJmsConnectionFactory&transactionManager=#transactionManager/ - *In consumer, the listening queue is defined with the following Camel URI*: jms.consumer.uri=/activemq:queue:Consumer.QUEUE_A.VirtualTopic.DeliveryCompletion?connectionFactory=connectionFactory&acknowledgementModeName=CLIENT_ACKNOWLEDGE&selector=DESTINATION_APP_ID='1234567890'/ In our producer test, we are sending in loop same set of messages to the destination virtual topic with few distinct application Id in the header (DESTINATION_APP_ID). The selector configured in the consumers is used to filter messages based on this header containing the application id. So we expect that when the producer sends a bunch of notification messages to the virtual topic (VirtualTopic.DeliveryCompletion), then they will be forwarded to listener queues according to the configured selector expression. The role of 'virtualSelectorCacheBrokerPlugin' is to cache all the selector expressions for each consumer listening on the virtual topic queue. Most of the time (I would say 99%) of the time, all this is working very well. All messages are properly forwarded to the proper queues according to the selector, other are discarded. However, after some time, some messages are not filtered properly and are sent to all listening queues and they stay there (since not accepted by consumers because of the selector). When we disable the plugin in ActiveMQ, we do not have this problem, however if one consumer goes down few minutes for example, it loose some messages of course. To void loosing messages when consumers are down, we want to use the plugin. But because we encountered that issue with it, it is not possible to continue use this approach (for the moment we can reproduce the expected behavior using the concept of Composite Destination, but is it not as flexible as the VirtualTopic). If anyone knows what is going on with this solution (with the "virtualSelectorCacheBrokerPlugin" plugin?), let us know. -- Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html