diff --git a/src/backend/services/core.service.ts b/src/backend/services/core.service.ts index a0db487..8597272 100644 --- a/src/backend/services/core.service.ts +++ b/src/backend/services/core.service.ts @@ -238,16 +238,35 @@ export class CoreService { const result = await new Promise((resolve) => { const timer = setTimeout(() => { this.logger.warn(`[requestPlugin] Timeout for ${routingKey}`); + if (errorFallback) clearTimeout(errorFallback); resolve(null); }, timeoutMs); + let errorFallback: ReturnType | null = null; + ch.consume(replyQueue.queue, (rmqMsg) => { if (rmqMsg && rmqMsg.properties.correlationId === correlationId) { - clearTimeout(timer); try { const parsed = JSON.parse(rmqMsg.content.toString()); - resolve(parsed.response ?? parsed); + const response = parsed.response ?? parsed; + + // Skip "no matching handler" errors from other services + // and wait for the correct response (up to timeoutMs - 1s) + if (response && response.err) { + if (!errorFallback) { + errorFallback = setTimeout(() => { + clearTimeout(timer); + resolve(response); + }, Math.min(timeoutMs - 1000, 15000)); + } + return; + } + + if (errorFallback) clearTimeout(errorFallback); + clearTimeout(timer); + resolve(response); } catch { + clearTimeout(timer); resolve(null); } }