[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-dev
Subject:    [jira] [Resolved] (AMQ-3245) SELECTORS doesn't work for releases
From:       "Melvin Ramos (JIRA)" <jira () apache ! org>
Date:       2011-03-31 14:26:05
Message-ID: 1634122576.24424.1301581565886.JavaMail.tomcat () hel ! zones ! apache ! org
[Download RAW message or body]


     [ 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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic