[
https://issues.apache.org/jira/browse/ARTEMIS-5093?focusedWorklogId=945170&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-945170
]
ASF GitHub Bot logged work on ARTEMIS-5093:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 22/Nov/24 14:18
Start Date: 22/Nov/24 14:18
Worklog Time Spent: 10m
Work Description: jbertram commented on code in PR #5291:
URL: https://github.com/apache/activemq-artemis/pull/5291#discussion_r1853985284
##########
artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java:
##########
@@ -1298,6 +1298,18 @@ public ServerLocatorImpl
setInitialMessagePacketSize(final int size) {
return this;
}
+ @Override
+ public int getOnMessageCloseTimeout() {
+ return config.onMessageCloseTimeout;
+ }
+
+ @Override
Review Comment:
I changed the JavaDoc to be more clear. I didn't want to add validation as
it wouldn't be consistent with the rest of the method and adding validation to
all the places that could realistically use it is well beyond the scope of this
PR.
##########
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:
Done.
Issue Time Tracking
-------------------
Worklog Id: (was: 945170)
Time Spent: 1h 40m (was: 1.5h)
> 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: 1h 40m
> 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