I'm setting the message selector for a non-persistent topic subscription at runtime via the ActiveMQActivationSpec.setMessageSelector and then restarting the org.jencks.JCAConnector as follows:
... logger.info("Setting selector to: " + selector); activemqActivationSpec.setMessageSelector(selector); jcaConnector.destroy(); jcaConnector.setActivationSpec(activemqActivationSpec); jcaConnector.start(); Thread.sleep(WAIT_FOR_SELECTOR_SET_MS); // Wait for the selector to be set/activated on the broker ... (I'm using ActiveMQ 5.2.0 and Jencks 2.1) Apparently, the message selector is set asynchronously, since when in my tests after the call to setMessageSelector(..) and restarting the connector I directly start sending messages to the topic, I still receive messages that should have been rejected based on the new selector. However, if I wait for a few seconds, and then send the messages, the selector does seem to be set/activated and the correct messages are received. I ran into the same issue when I was using Spring's JmsTemplate + DefaultMessageListenerContainer. (I've moved from JmsTemplate to Jencks to prevent me from missing messages ( http://activemq.apache.org/jmstemplate-gotchas.html JmsTemplate gotchas )) When using Spring I set the message selector in the following way: ... DefaultMessagListenerContainer dmlc; ... String selector = JMSSelectorCreator.createJMSKeySelector(allKeys); dmlc.setMessageSelector(selector); if (dmlc.getCacheLevel() > DefaultMessageListenerContainer.CACHE_CONSUMER) { logger.warn("Cache level of DefaultMessageListenerContainer is > CACHE_CONSUMER, therefore a restart of the container is required to activate" + " a new Message Selector. Consider setting a lower cache level."); dmlc.shutdown(); dmlc.initialize(); } Thread.sleep(WAIT_FOR_SELECTOR_SET_MS); ... However, as noted before, waiting for the message to be set/activated was still required. Which leads me to my question: Is there any way of getting notified when the message selector has been set/activated on the broker? (I've looked into Advisory messages, but these don't seem to provide information about selectors) Or is there a method to set the selector that blocks until the selector has actually been set/activated on the server? Thanks, Peter -- View this message in context: http://www.nabble.com/Setting-message-selector-synchronously-tp22804951p22804951.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.