From 110cfc8cf8f91f9bed790f2408e3ba0c1890edf2 Mon Sep 17 00:00:00 2001 From: lzh Date: Wed, 21 Jan 2026 22:12:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(iot-server):=20=E6=B6=88=E8=B4=B9=E8=80=85?= =?UTF-8?q?=E4=BC=98=E5=85=88=E5=88=A4=E6=96=ADskipReply=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - handleUpstreamDeviceMessage 优先检查 skipReply 字段 - 协议层已处理回复的消息跳过业务层回复逻辑 Co-Authored-By: Claude Opus 4.5 --- .../device/message/IotDeviceMessageServiceImpl.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/device/message/IotDeviceMessageServiceImpl.java b/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/device/message/IotDeviceMessageServiceImpl.java index 8ee6e2e..d987baf 100644 --- a/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/device/message/IotDeviceMessageServiceImpl.java +++ b/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/device/message/IotDeviceMessageServiceImpl.java @@ -169,10 +169,12 @@ public class IotDeviceMessageServiceImpl implements IotDeviceMessageService { getSelf().createDeviceLogAsync(message); // 3. 回复消息。前提:非 _reply 消息,并且非禁用回复的消息 - // 条件1:防止对"回复消息"再次回复,避免无限循环 - // 条件2:某些特定的method不需要回复(如设备状态变更、OTA进度上报) - // 条件3(新增):HTTP短连接场景,因为已经在请求中直接响应了,不需要再通过消息总线发送回复 - if (IotDeviceMessageUtils.isReplyMessage(message) + // 条件1:协议层已处理回复(skipReply=true),业务层无需再回复 + // 条件2:防止对"回复消息"再次回复,避免无限循环 + // 条件3:某些特定的method不需要回复(如设备状态变更、OTA进度上报) + // 条件4:HTTP短连接场景,因为已经在请求中直接响应了,不需要再通过消息总线发送回复 + if (IotDeviceMessageUtils.isSkipReply(message) + || IotDeviceMessageUtils.isReplyMessage(message) || IotDeviceMessageMethodEnum.isReplyDisabled(message.getMethod()) || StrUtil.isEmpty(message.getServerId())) { return; // serverId 为空,不记录回复消息