Hi All,

I'm having issues with a little piece of the code which is supposed to
selectively consume the messages from a queue, using the message priority as
the selector value. In addition to that, the grouping of messages is also
being used.

The prioritization policy is defined for the broker:

        PolicyEntry policy = new PolicyEntry();
        policy.setQueue(">");
        policy.setPrioritizedMessages(true);

The route is as follows:

        from("jms:queue:test?concurrentConsumers=1&selector=JMSPriority>=4")
            .bean(Processor.class, "process")
            .to("mock:result");

        from("jms:queue:test?concurrentConsumers=1&selector=JMSPriority<4")
            .bean(Processor.class, "process")
            .to("mock:result");

The test messages are pushed to the queue as follows:

        List<Message> messagesToSend = new ArrayList<>();
        Message message;

        message = new Message(1);
        message.setGroup("1");
        message.setPriority(0);
        messagesToSend.add(message);

        message = new Message(2);
        message.setGroup("1");
        message.setPriority(9);
        messagesToSend.add(message);

        message = new Message(3);
        message.setGroup("1");
        message.setPriority(0);
        messagesToSend.add(message);

        for (Message messageToSend : messagesToSend) {

            Map<String, Object> headers = new HashMap<String, Object>();
            headers.put(JMS_GROUP_ID_HEADER, messageToSend.getGroup());


            headers.put(JMS_PRIORITY_HEADER, messageToSend.getPriority());
            template.sendBodyAndHeaders("jms:queue:test3", messageToSend,
headers);
        }

The behavior I expect is the following:

- Message 1 is pushed to the queue.
- Message 1 is consumed by the thread #1.
- Message 2 is pushed to the queue.
- Message 2 is consumed by the thread #2 (because of priority based
selector).
- Message 3 is pushed to the queue.
- Message 3 is consumed by the thread #1.

Instead, the behavior I get is the following:

- Message 1 is pushed to the queue.
- Message 1 is consumed by the thread #1.
- Message 2 is pushed to the queue.
- Message 2 sits on the queue, not being consumed by any thread.
- Message 3 is pushed to the queue.
- Message 3 is consumed by the thread #1.

The general overview of the situation is that only the messages matching the
priority of the first message pushed to the queue will be processed,
regardless of the order they're pushed in, while the messages with priority
falling into the other side of the selector will not be consumed at all and
will stay sitting on the queue.

The version of AMQ broker I'm using is 5.10.

So, does this seems to you like a bug or a feature I'm not able to
understand? All input on the topic is highly welcome and appreciated!

Regards,
Frankie



--
View this message in context: 
http://activemq.2283324.n4.nabble.com/Selective-consuming-of-priority-messages-with-message-groups-tp4704813.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to