[ 
https://issues.apache.org/jira/browse/ARTEMIS-3925?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17578477#comment-17578477
 ] 

Rômulo Coutinho commented on ARTEMIS-3925:
------------------------------------------

This is my test case:

 
{code:java}
    /**
     * Tests last value messages.
     *
     * @throws Exception If the test fails.
     */
    @Test
    public void testLastVaue() throws Exception {
        // Makes sure there are no messages to consume before the test.
        Message message = 
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 100L);
        while (message != null) {
            message = 
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 100L);
        }        // Sends messages in a row.
        
this.jmsTemplateTestService.sendMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 "message1" /* message */, null /* last value */, 0, 0);
        
this.jmsTemplateTestService.sendMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 "message2", null, 0, 0);
        
this.jmsTemplateTestService.sendMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 "message3", "teste2", 0, 0);
        
this.jmsTemplateTestService.sendMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 "message4", "teste2", 0, 0);
        
        // Wait until all messages are sent and consumes them.
        
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 1000L);
        
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 1000L);
        
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 1000L);
        
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 1000L);
        
        // Last values messages should not be consumed twice,
        
Assertions.assertTrue(JmsTemplateTestService.ACKED_MESSAGES.contains("message1"));
        
Assertions.assertTrue(JmsTemplateTestService.ACKED_MESSAGES.contains("message2"));
        
Assertions.assertTrue(!JmsTemplateTestService.ACKED_MESSAGES.contains("message3"));
        
Assertions.assertTrue(JmsTemplateTestService.ACKED_MESSAGES.contains("message4"));
        
        // A new last value message should be consumed.
        
this.jmsTemplateTestService.sendMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 "message5", "teste2", 0, 0);
        
this.jmsTemplateTestService.consumeMessage(JmsTemplateTestService.JMS_TEMPLATE_TEST_QUEUE,
 1000L);
        
Assertions.assertTrue(JmsTemplateTestService.ACKED_MESSAGES.contains("message5"));
    }
{code}
 

It has some abstraction on it (spring boot and a helper class). If the test is 
not clear, let me know.

 

With version 2.23.1, test passes. Under 2.24.0, only the last message is 
consumed (message4).

 

> Last value queues only keeping last messages (regardless of last value key)
> ---------------------------------------------------------------------------
>
>                 Key: ARTEMIS-3925
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3925
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>    Affects Versions: 2.24.0
>            Reporter: Rômulo Coutinho
>            Priority: Major
>
> Last value was working just as expected until version 2.23.1. We upgraded for 
> 2.24.0 and only the last message is kept in the queue for consumption (even 
> for different last values).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to