From 40a33e4ac7141a6bcdf4391c2f2d4cb5d75f0bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=80=AA=E7=A8=8B=E4=BC=9F?= Date: Tue, 9 Jun 2026 01:30:10 +0800 Subject: [PATCH] fix(feishu): decouple trigger ingest from the Lark WS dispatch thread (#208) ChannelMessageEventBridge.onChannelMessage() ran synchronously on the Lark SDK WebSocket dispatch thread; when the DB pool was saturated its ingest query blocked that thread and subsequent messages were silently dropped. - @Async moves trigger ingest onto the (vthread + SecurityContext-propagating) async executor, freeing the WS dispatch thread. - Add a 10s timeout to the refreshTenantAccessToken() HTTP request, which previously had none. Scope narrowed per review to only fix #208: the @mention alias learning and session-id changes are dropped (to be raised as separate PRs), and dev's existing message dedup is left untouched. Closes #208 --- .../main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java | 1 + .../vip/mate/trigger/dispatch/ChannelMessageEventBridge.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java b/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java index 2921d90a..847e5290 100644 --- a/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java +++ b/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java @@ -794,6 +794,7 @@ public class FeishuChannelAdapter extends AbstractChannelAdapter implements Stre HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(apiBase + "/open-apis/auth/v3/tenant_access_token/internal")) .header("Content-Type", "application/json; charset=utf-8") + .timeout(Duration.ofSeconds(10)) .POST(HttpRequest.BodyPublishers.ofString(jsonBody)) .build(); diff --git a/mateclaw-server/src/main/java/vip/mate/trigger/dispatch/ChannelMessageEventBridge.java b/mateclaw-server/src/main/java/vip/mate/trigger/dispatch/ChannelMessageEventBridge.java index bd868192..cb7e2b39 100644 --- a/mateclaw-server/src/main/java/vip/mate/trigger/dispatch/ChannelMessageEventBridge.java +++ b/mateclaw-server/src/main/java/vip/mate/trigger/dispatch/ChannelMessageEventBridge.java @@ -3,6 +3,7 @@ package vip.mate.trigger.dispatch; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import vip.mate.channel.event.ChannelMessageReceivedEvent; import vip.mate.trigger.ingest.TriggerEventEnvelope; @@ -31,6 +32,7 @@ public class ChannelMessageEventBridge { private final TriggerEventIngestService ingestService; + @Async @EventListener public void onChannelMessage(ChannelMessageReceivedEvent event) { if (event == null) return;