fix(iot-server): 消费者优先判断skipReply字段
- handleUpstreamDeviceMessage 优先检查 skipReply 字段 - 协议层已处理回复的消息跳过业务层回复逻辑 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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 为空,不记录回复消息
|
||||
|
||||
Reference in New Issue
Block a user