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

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

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


##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageHandlerTest.java:
##########
@@ -117,6 +119,49 @@ 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 = 200;
+      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);
+      AtomicBoolean messageHandlerFinished = new AtomicBoolean(false);
+      consumer.setMessageHandler(message -> {
+         latch.countDown();
+         // don't just Thread.sleep() here because it will be interrupted on 
ClientConsumer.close()
+         while (!messageHandlerFinished.get()) {
+            try {
+               Thread.sleep(10);
+            } catch (InterruptedException e) {
+               // ignore
+            }
+         }
+         messageHandlerFinished.set(true);

Review Comment:
   I would use a different boolean for the looping and the completion checking, 
it would be much clearer, and also means the set(true) doesnt then seem like 
dead-code (it can only ever execute here if it is already true).
   
   The messageHandlerFinished.set(true); should also go in a try-finally so 
that the later assertFalse on it is guarding against unexpected-exits as well 
as the sole expected one being set up by the test.
   
   You could then also wait for it to trip before the test method exits. Maybe 
using a CDL instead of an AtomicBoolean actually to make that succinct and 
efficient.
   
   





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

    Worklog Id:     (was: 945522)
    Time Spent: 3h 20m  (was: 3h 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: 3h 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


Reply via email to