[ 
https://issues.apache.org/jira/browse/ARTEMIS-5093?focusedWorklogId=945219&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-945219
 ]

ASF GitHub Bot logged work on ARTEMIS-5093:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 22/Nov/24 17:54
            Start Date: 22/Nov/24 17:54
    Worklog Time Spent: 10m 
      Work Description: jbertram commented on code in PR #5291:
URL: https://github.com/apache/activemq-artemis/pull/5291#discussion_r1854399564


##########
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:
   > Governing the exit point of the handler rather than just the time would 
entirely avoid the brittle reliance on nice scheduling.
   
   I'm not following here. Can you elaborate?





Issue Time Tracking
-------------------

    Worklog Id:     (was: 945219)
    Time Spent: 2h 10m  (was: 2h)

> 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 10m
>  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


Reply via email to