[ https://issues.apache.org/jira/browse/AMQ-3245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Melvin Ramos resolved AMQ-3245. ------------------------------- Resolution: Fixed Adding memory limits for queue solved the problem. This document will at least be the information on how selectors work with regards to destination policies. > SELECTORS doesn't work for releases 5.4.0 to current > ---------------------------------------------------- > > Key: AMQ-3245 > URL: https://issues.apache.org/jira/browse/AMQ-3245 > Project: ActiveMQ > Issue Type: Bug > Components: Selector > Affects Versions: 5.4.1, 5.4.2 > Reporter: Melvin Ramos > Attachments: ActiveMQ_Test_Case.txt, JmsTestConsumer1.java, > JmsTestProducer1.java, activemq.xml > > > Is it possible that selector was broken due to new enhancement regarding REST > selectors on 5.4.0? We are using 5.3.0 and selectors are working fine, > however since we've upgraded our demo and test environments to 5.4.1 and > essentially 5.4.2 it stop working for some reason. I can recreate it 100% of > the time and below are the steps. > 1) First create the producer with String property set to 30. i.e. test, 30: > {code} > String username="Me" > String passwd = "invicible" > String url > ="failover:(tcp://localhost:51515)?maxReconnectDelay=5000&useExponentialBackOff=false"; > ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(username, > passwd, url); > Connection connection = connectionFactory.createConnection(); > // connection.setUseCompression(true); set this on the URL instead > connection.setExceptionListener(this); > String destinationString = "Test.Dest"; > // create a session, destination, and producer > Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); > Destination destination = session.createQueue(destinationString); > MessageProducer producer = session.createProducer(destination); > producer.setDeliveryMode(DeliveryMode.PERSISTENT); > Message message = session.createTextMessage("This is a test message"); > message.setIntProperty("test", 30); > // insert the message 1000 times. > for (long l = 0L; l < 1000; l++) { > producer.send(message); > } > producer.close(); > session.close(); > connection.close(); > {code} > Now we have 1000 message sitting on activemq, if you navigate to > http://localhost:8161/admin and view "Test.Dest" queue you should see the > 1000 message there. > 2) Create the consumer with test > 50 selector. > {code} > public void setup() { > String username="Me" > String passwd = "invicible" > String url > ="failover:(tcp://localhost:51515)?maxReconnectDelay=5000&useExponentialBackOff=false"; > //"tcp://localhost:51515"; > ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(username, > passwd, url); > Connection connection = connectionFactory.createConnection(); > // connection.setUseCompression(true); set this on the URL instead > connection.setExceptionListener(this); > // create a session, destination, and consumer > Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); > String destinationString = "Test.Dest"; > session.createQueue(destinationString); > MessageConsumer consumer = session.createConsumer(destination, "test > 50"); > consumer.setMessageListener(this); > connection.start(); > } > public void onMessage(Message message) { > try { > if (print && text) { > TextMessage textMessage = (TextMessage) message; > System.out.println(textMessage.getText()); > } > catch (Exception ex) > { //swallow } > } > {code} > Once connected to broker, you'll see that it doesn't do anything as the > message is not for this selector. > 3) Edit the code to producer. > {code} > message.setIntProperty("test", 60); > {code} > And then rerun the producer to insert the 1000 records again. > Actual: Nothing happens, the consumer just waits for any message that comes > in that matches the selector. > Expected: The message gets consumed, as the latter part of the producer ran > matches the selector. > This behavior works perfectly fine with 5.3.0. As selector is an important > functionality of JMS as a whole this being broken is actually bad. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira