Explorar o código

fix:"优化日志自动上传导致MQTT阻塞问题"

soobin hai 2 meses
pai
achega
16231540dd

+ 16 - 2
src/main/java/com/szwl/handle/response/LogMessageProcessor.java

@@ -8,18 +8,24 @@ import com.szwl.constant.OperationType;
 import com.szwl.model.entity.MessageLog;
 import com.szwl.model.entity.TEquipment;
 import com.szwl.model.utils.PushUtils;
-import com.szwl.service.TEquipmentDescService;
 import com.szwl.service.TEquipmentService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
+@Slf4j
 @Component
 public class LogMessageProcessor implements ResponseProcessor {
 
     @Resource
     private TEquipmentService equipmentService;
 
+    private final ExecutorService sendExecutor =
+            Executors.newSingleThreadExecutor(); // 独立发送线程
+
     @Override
     public void process(MessageLog messageLog) {
         Integer statusCode = messageLog.getStatusCode();
@@ -40,7 +46,15 @@ public class LogMessageProcessor implements ResponseProcessor {
                 String upToken = auth.uploadToken(ConfigConsts.QINIU_CLOUD_BUCKET, key);
                 // 生成发送消息
                 String message = PushUtils.buildJsonLog(OperationType.LOG.getCode(), kind, upToken, key).toString();
-                equipmentService.sendRemoteMessage(clientId, OperationType.LOG, message, equipment.getAdminId());
+                sendExecutor.execute(() -> {
+                    // 推送消息
+                    try {
+                        equipmentService.sendRemoteMessage(clientId, OperationType.LOG, message, equipment.getAdminId());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        log.info("--发送消息失败:{}", e.getMessage());
+                    }
+                });
             }
         }
     }

+ 2 - 0
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -16,6 +16,7 @@ import com.szwl.model.utils.PushUtils;
 import com.szwl.model.utils.YunPianSms;
 import com.szwl.service.*;
 import com.szwl.util.WechatSendUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.amqp.core.MessageProperties;
@@ -39,6 +40,7 @@ import java.util.stream.Collectors;
  * @author wuhs
  * @since 2023-10-25
  */
+@Slf4j
 @Service
 public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {