|
|
|
package com.zhonglai.luhui.mqtt.comm.service;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
import com.ruoyi.system.domain.IotDevice;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.DeviceSensorData;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.LogDeviceOperation;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.ServerDto;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.business.BusinessDto;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.business.BusinessDtoClassNew;
|
|
...
|
...
|
@@ -10,8 +9,12 @@ import com.zhonglai.luhui.mqtt.comm.factory.BusinessAgreement; |
|
|
|
import com.zhonglai.luhui.mqtt.comm.factory.BusinessAgreementFactory;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.factory.Topic;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.util.ByteUtil;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.util.DateUtils;
|
|
|
|
import com.zhonglai.luhui.mqtt.service.db.DeviceService;
|
|
|
|
import lombok.SneakyThrows;
|
|
|
|
import org.apache.log4j.FileAppender;
|
|
|
|
import org.apache.log4j.PatternLayout;
|
|
|
|
import org.apache.log4j.RollingFileAppender;
|
|
|
|
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
|
|
|
|
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
|
|
|
|
import org.eclipse.paho.client.mqttv3.MqttException;
|
|
...
|
...
|
@@ -21,7 +24,7 @@ import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
@Component
|
|
|
|
public class MqttCallback implements MqttCallbackExtended {
|
|
...
|
...
|
@@ -59,12 +62,29 @@ public class MqttCallback implements MqttCallbackExtended { |
|
|
|
public void messageArrived(String s, MqttMessage mqttMessage) {
|
|
|
|
//接收到消息
|
|
|
|
log.info("接收到消息topc:{}, mqttMessage {},payload 十六进制 {}",s,mqttMessage, ByteUtil.hexStringToSpace(ByteUtil.toHexString(mqttMessage.getPayload())));
|
|
|
|
|
|
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
|
buffer.append("topic:");
|
|
|
|
buffer.append(s);
|
|
|
|
buffer.append("\r\n");
|
|
|
|
buffer.append("mqttMessage字符串:");
|
|
|
|
buffer.append(mqttMessage.toString());
|
|
|
|
buffer.append("\r\n");
|
|
|
|
buffer.append("mqttMessage十六进制:");
|
|
|
|
buffer.append(ByteUtil.hexStringToSpace(ByteUtil.toHexString(mqttMessage.getPayload())));
|
|
|
|
buffer.append("\r\n");
|
|
|
|
buffer.append("\r\n");
|
|
|
|
Topic topic = new Topic(s);
|
|
|
|
if(null == topic)
|
|
|
|
{
|
|
|
|
log.error("消息{},topic为空,不做解析");
|
|
|
|
getLoggerByName("error").error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//日志记录
|
|
|
|
getLoggerByName(topic.getClientid()).info(buffer.toString());
|
|
|
|
|
|
|
|
//准备数据
|
|
|
|
byte[] data = mqttMessage.getPayload();
|
|
|
|
IotDevice iotDevice = deviceService.getDeviceById(topic.getClientid());
|
|
...
|
...
|
@@ -110,4 +130,37 @@ public class MqttCallback implements MqttCallbackExtended { |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static org.apache.log4j.Logger getLoggerByName(String name) {
|
|
|
|
// 生成新的Logger
|
|
|
|
// 如果已經有了一個Logger實例返回現有的
|
|
|
|
org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(name);
|
|
|
|
// 清空Appender。特別是不想使用現存實例時一定要初期化
|
|
|
|
logger.removeAllAppenders();
|
|
|
|
// 設定Logger級別。
|
|
|
|
// logger.setLevel(Level.DEBUG);
|
|
|
|
// 設定是否繼承父Logger。
|
|
|
|
// 默認為true。繼承root輸出。
|
|
|
|
// 設定false後將不輸出root。
|
|
|
|
logger.setAdditivity(true);
|
|
|
|
// 生成新的Appender
|
|
|
|
FileAppender appender = new RollingFileAppender();
|
|
|
|
PatternLayout layout = new PatternLayout();
|
|
|
|
// log的输出形式
|
|
|
|
String conversionPattern = "%d{HH:mm:ss} [%p] -%m%n";
|
|
|
|
layout.setConversionPattern(conversionPattern);
|
|
|
|
appender.setLayout(layout);
|
|
|
|
// log输出路径
|
|
|
|
// 这里使用了环境变量[catalina.home],只有在tomcat环境下才可以取到
|
|
|
|
// String tomcatPath = java.lang.System.getProperty("catalina.home");
|
|
|
|
appender.setFile( "logs/" + name+"_"+ DateUtils.parseDateToStr("yyyyMMdd",new Date()) + ".log");
|
|
|
|
// log的文字码
|
|
|
|
appender.setEncoding("UTF-8");
|
|
|
|
// true:在已存在log文件后面追加 false:新log覆盖以前的log
|
|
|
|
appender.setAppend(true);
|
|
|
|
// 适用当前配置
|
|
|
|
appender.activateOptions();
|
|
|
|
// 将新的Appender加到Logger中
|
|
|
|
logger.addAppender(appender);
|
|
|
|
return logger;
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|