From 98b36e0f14f452c10d03ab4ebaa87f8fc89c3a5d Mon Sep 17 00:00:00 2001 From: Xin Zheng Date: Thu, 26 Sep 2024 16:04:13 +0700 Subject: [PATCH 1/2] use x-timeout value as request timeout --- .../swisspush/gateleen/queue/queuing/QueueProcessor.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java b/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java index e23777df..234445a5 100755 --- a/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java +++ b/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java @@ -292,7 +292,13 @@ private void executeQueuedRequest(Message message, Logger logger, Ht performCircuitBreakerActions(queueName, queuedRequest, FAILURE, state); }); }; - request1.idleTimeout(120000); // avoids blocking other requests + + if (queuedRequest.getHeaders().get("x-timeout") != null && !queuedRequest.getHeaders().get("x-timeout").isEmpty()) { + request1.idleTimeout((long) (Long.parseLong(queuedRequest.getHeaders().get("x-timeout")) * 1.1)); + } else { + request1.idleTimeout(120000); // avoids blocking other requests + } + if (queuedRequest.getPayload() != null) { vertx.executeBlocking(() -> { long beginEpchMs = currentTimeMillis(); From 55acf126d675fc8008fe9642aeb9dfcb93b5dd07 Mon Sep 17 00:00:00 2001 From: dominik-cnx <30789476+dominik-cnx@users.noreply.github.com> Date: Fri, 27 Sep 2024 13:47:18 +0700 Subject: [PATCH 2/2] also log the timeout being used --- .../gateleen/queue/queuing/QueueProcessor.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java b/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java index 234445a5..7e2a8214 100755 --- a/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java +++ b/gateleen-queue/src/main/java/org/swisspush/gateleen/queue/queuing/QueueProcessor.java @@ -18,6 +18,7 @@ import org.swisspush.gateleen.core.http.RequestLoggerFactory; import org.swisspush.gateleen.core.util.Address; import org.swisspush.gateleen.core.util.StatusCode; +import org.swisspush.gateleen.core.util.StringUtils; import org.swisspush.gateleen.monitoring.MonitoringHandler; import org.swisspush.gateleen.queue.expiry.ExpiryCheckHandler; import org.swisspush.gateleen.queue.queuing.circuitbreaker.QueueCircuitBreaker; @@ -293,12 +294,16 @@ private void executeQueuedRequest(Message message, Logger logger, Ht }); }; - if (queuedRequest.getHeaders().get("x-timeout") != null && !queuedRequest.getHeaders().get("x-timeout").isEmpty()) { - request1.idleTimeout((long) (Long.parseLong(queuedRequest.getHeaders().get("x-timeout")) * 1.1)); - } else { - request1.idleTimeout(120000); // avoids blocking other requests + long idleTimeout = 120_000; + String xTimeout = queuedRequest.getHeaders().get("x-timeout"); + if (StringUtils.isNotEmpty(xTimeout)) { + // the microservice that enqueued the item has requested a specific timeout, use it instead of the default + idleTimeout = Long.parseLong(xTimeout); } + logger.debug("performing request {} {} using idle timeout {}", queuedRequest.getMethod(), queuedRequest.getUri(), idleTimeout); + request1.idleTimeout(idleTimeout); // avoids to block the queue + if (queuedRequest.getPayload() != null) { vertx.executeBlocking(() -> { long beginEpchMs = currentTimeMillis();