[
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)