chore(feishu): bump oapi-sdk to 2.7.1 and replace WS-close reflection with public API

This commit is contained in:
matevip 2026-05-25 21:36:33 +08:00
parent e9ead959b8
commit 6c8c490bd3
2 changed files with 6 additions and 16 deletions

View File

@ -554,14 +554,9 @@ public class FeishuChannelAdapter extends AbstractChannelAdapter implements Stre
* 释放 ExecutorService仅置空引用会导致旧连接的 pingLoop 和线程池
* 持续运行造成文件描述符和线程泄漏最终使新连接无法建立
* <p>
* SDK 内部 {@code disconnect()} 这条单一入口完成 cleanup 它本身就是
* SDK {@code onClosed} 回调里调用的方法包含
* {@code conn.close(1000) executor.shutdown() 字段清零} 的全套动作
* 该方法在 SDK 2.6.1 中是 {@code protected}外部需通过反射 + setAccessible
* 调用SDK 2.7.1 起新增了 public {@code close()}届时整段反射可以删除
* <p>
* 反射失败例如未来 SDK 重命名 {@code disconnect} WARN 级别记录而非
* 静默吞掉避免泄漏在升级后悄无声息地复发
* SDK 2.7.0 起暴露了 public {@code close()} 入口内部调用 protected
* {@code disconnect()} 完成 {@code conn.close(1000) executor.shutdown()
* 字段清零} 的全套清理直接调用即可无需反射
*/
private void stopWebSocket() {
cancelSilentDisconnectWatchdog();
@ -572,14 +567,9 @@ public class FeishuChannelAdapter extends AbstractChannelAdapter implements Stre
}
if (wsClient != null) {
try {
var disconnect = wsClient.getClass().getDeclaredMethod("disconnect");
disconnect.setAccessible(true);
disconnect.invoke(wsClient);
} catch (NoSuchMethodException e) {
log.warn("[feishu] SDK Client.disconnect() not found — WebSocket cleanup skipped, "
+ "leak may recur until SDK API is re-verified: {}", e.getMessage());
wsClient.close();
} catch (Exception e) {
log.warn("[feishu] WebSocket disconnect failed: {}", e.getMessage());
log.warn("[feishu] WebSocket close failed: {}", e.getMessage());
}
}
wsClient = null;

View File

@ -43,7 +43,7 @@
<!-- Channel and platform SDKs -->
<dingtalk-stream.version>1.3.12</dingtalk-stream.version>
<lark-oapi.version>2.6.1</lark-oapi.version>
<lark-oapi.version>2.7.1</lark-oapi.version>
<jda.version>6.4.1</jda.version>
<slack.version>1.48.1</slack.version>