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 为空,不记录回复消息