[
https://issues.apache.org/jira/browse/ARTEMIS-5093?focusedWorklogId=945225&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-945225
]
ASF GitHub Bot logged work on ARTEMIS-5093:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 22/Nov/24 18:41
Start Date: 22/Nov/24 18:41
Worklog Time Spent: 10m
Work Description: jbertram commented on code in PR #5291:
URL: https://github.com/apache/activemq-artemis/pull/5291#discussion_r1854483764
##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageHandlerTest.java:
##########
@@ -117,6 +118,42 @@ public void onMessage(final ClientMessage message) {
session.close();
}
+ @Test
+ public void testMessageHandlerCloseTimeout() throws Exception {
+ // create Netty acceptor so client can use new onMessageCloseTimeout URL
parameter
+ server.getRemotingService().createAcceptor("netty",
"tcp://127.0.0.1:61616").start();
+ final int timeout = 1000;
+ locator =
ActiveMQClient.createServerLocator("tcp://127.0.0.1:61616?onMessageCloseTimeout="
+ timeout);
+ sf = createSessionFactory(locator);
+ ClientSession session = addClientSession(sf.createSession(false, true,
true));
+ session.createQueue(QueueConfiguration.of(QUEUE).setDurable(false));
+ ClientProducer producer = session.createProducer(QUEUE);
+ producer.send(createTextMessage(session, "m"));
+
+ ClientConsumer consumer = session.createConsumer(QUEUE, null, false);
+
+ session.start();
+
+ CountDownLatch latch = new CountDownLatch(1);
+ consumer.setMessageHandler(message -> {
+ latch.countDown();
+ // don't just Thread.sleep() here because it will be interrupted on
ClientConsumer.close()
+ long start = System.currentTimeMillis();
+ while (System.currentTimeMillis() - start < 2000) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+ });
+ latch.await();
+ long start = System.currentTimeMillis();
+ consumer.close();
+ long end = System.currentTimeMillis();
+ assertTrue( (end - start >= timeout) && (end - start <= 2000), "Closing
consumer took " + (end - start) + "ms");
Review Comment:
As far as I can tell the test is essentially relying on
`java.util.concurrent.CountDownLatch#await(long,
java.util.concurrent.TimeUnit)` (eventually called from
`org.apache.activemq.artemis.api.core.client.ClientConsumer#close`) for its
accuracy/reliability. Is that really reliant on nice scheduling?
Issue Time Tracking
-------------------
Worklog Id: (was: 945225)
Time Spent: 2h 20m (was: 2h 10m)
> Support configurable onMessage timeout when closing consumer
> ------------------------------------------------------------
>
> Key: ARTEMIS-5093
> URL: https://issues.apache.org/jira/browse/ARTEMIS-5093
> Project: ActiveMQ Artemis
> Issue Type: Improvement
> Reporter: Justin Bertram
> Assignee: Justin Bertram
> Priority: Major
> Labels: pull-request-available
> Time Spent: 2h 20m
> Remaining Estimate: 0h
>
> When closing a consumer the Core client is hard-coded to wait for 10,000ms
> for any {{onMessage}} to complete. This timeout should be configurable.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact