sandu-common/src/main/resources/logback-spring.xml
@@ -74,13 +74,13 @@ </root> </springProfile> <springProfile name="xm"> <springProfile name="xm_local"> <root level="info" > <appender-ref ref="STDOUT"/> </root> </springProfile> <!-- ç产ç¯å¢. æ¥å¿çº§å«ä¸ºWARNä¸åæ¥å¿æä»¶--> <springProfile name="prod,docker"> <springProfile name="prod,docker,xm_lj"> <root level="warn"> <appender-ref ref="STDOUT"/> <appender-ref ref="ASYNC"/> ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/callback/StatusMqttCallBack.java
@@ -10,6 +10,7 @@ import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.stereotype.Component; @@ -34,7 +35,8 @@ private static final String localMqttConnectStatusDisconnected = "disconnected"; public static final Map<String, Integer> localMqttConnectStatusMap = new ConcurrentHashMap<>(); public static final String localMqttConnectStatus = "localMqttConnectStatus."; protected final static ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor( @@ -56,7 +58,7 @@ protected void handleReceiveMessage(String topic, String message) { EXECUTOR_SERVICE.submit(() -> processMessage(topic,message)); log.info("æ¥æ¶å°æ¶æ¯---StatusMqttCallBack:topic={},message={}", topic, message); // log.info("æ¥æ¶å°æ¶æ¯---StatusMqttCallBack:topic={},message={}", topic, message); } @@ -69,17 +71,15 @@ String mac = topic.split("/")[4]; String status = topic.split("/")[5]; System.out.println("----------------------"); System.out.println(mac); System.out.println(status); if (status.equals(localMqttConnectStatusConnected)){ // è®¾å¤æ°æ®ä¸æ¥ localMqttConnectStatusMap.put(mac,1); boolean set = RedisUtils.getBean().set(localMqttConnectStatus + mac, 1); log.error("设å¤ä¸çº¿------ï¼mac:{},ä¸çº¿,{}",mac,set); } else if (status.equals(localMqttConnectStatusDisconnected)){ localMqttConnectStatusMap.put(mac,0); boolean set = RedisUtils.getBean().set(localMqttConnectStatus+mac,0); log.error("设å¤ä¸çº¿------ï¼mac:{},ä¸çº¿.{}",mac,set); } } catch (Exception e) { e.printStackTrace(); ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/KeepEMQXClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package com.sandu.ximon.admin.localMQTT.client; import com.sandu.ximon.admin.localMQTT.config.MqttConfig; import com.sandu.ximon.admin.localMQTT.model.MqttClientVO; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; /** * @author van * @version 1.0 * msgï¼ * @date 2022/11/29 13:46 */ @Slf4j @EnableScheduling @Component public class KeepEMQXClient { @Autowired private MqttConfig mqttConfig; @Resource private MqttClientManager mqttClientManager; @Scheduled(cron = "*/30 * * * * * ") public void keepClient() { List<MqttClientVO> mqttClientList = mqttConfig.getClientList(); for (MqttClientVO mqttClientVO : mqttClientList) { //å建客æ·ç«¯ï¼å®¢æ·ç«¯IDï¼demoï¼åè°ç±»è·å®¢æ·ç«¯IDä¸è´ MqttClient mqttClient = MqttClientManager.getInstance().getMqttClientById(mqttClientVO.getClientId()); if (null == mqttClient) { log.error("Not exist mqttClient where it's clientId is {}", mqttClientVO.getClientId()); mqttClientManager.createMqttClient(mqttClientVO.getClientId(), mqttClientVO.getSubscribeTopic(), mqttClientVO.getUserName(), mqttClientVO.getPassword()); System.out.println(mqttClient.getClientId() + "éæ°åå»ºå®æ"); } else { try { mqttClient.publish("v1/devices/keepAlive", new MqttMessage() ); } catch (MqttException e) { log.error("mqttClient.getClientId()..åéæ¶æ¯å¤±è´¥..........."); mqttClientManager.createMqttClient(mqttClientVO.getClientId(), mqttClientVO.getSubscribeTopic(), mqttClientVO.getUserName(), mqttClientVO.getPassword()); log.error("å建."+mqttClient.getClientId()+".æå..........."); } } }} } ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/client/MqttClientCreate.java
@@ -34,18 +34,19 @@ */ public static final Map<String, MqttClient> MQTT_CLIENT_MAP = new ConcurrentHashMap<>(); /** * å建MQTT客æ·ç«¯ */ @PostConstruct public void createMqttClient() { System.out.println("createMqttClient"); List<MqttClientVO> mqttClientList = mqttConfig.getClientList(); for (MqttClientVO mqttClient : mqttClientList) { //å建客æ·ç«¯ï¼å®¢æ·ç«¯IDï¼demoï¼åè°ç±»è·å®¢æ·ç«¯IDä¸è´ System.out.println(mqttClient.getClientId()); mqttClientManager.createMqttClient(mqttClient.getClientId(), mqttClient.getSubscribeTopic(), mqttClient.getUserName(), mqttClient.getPassword()); System.out.println(mqttClient.getClientId()+"åå»ºå®æ"); } } } ximon-admin/src/main/java/com/sandu/ximon/admin/localMQTT/controller/localMQTTTestController.java
@@ -1,12 +1,13 @@ package com.sandu.ximon.admin.localMQTT.controller; import com.sandu.ximon.admin.localMQTT.util.MqttClientUtil; import com.sandu.ximon.admin.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatus; import static java.lang.Thread.sleep; /** @@ -24,7 +25,7 @@ @RequestMapping("/test") public String localMQTT() throws InterruptedException { for (int i = 0; i < 100; i++) { for (int i = 0; i < 1000; i++) { /* * å¼ç¯100 @@ -40,29 +41,48 @@ * 5åé * FEA501000CFE210004FFFF012C4A7824285825CB53 * */ // å¼10 String result1 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", "FEA501000BFE010003FFFF0AA542FD69D4E6194E"); log.info("å¼ç¯è¿åç»æ:"+result1); sleep(5000); // å ³ String result2 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", "FEA501000BFE0100030001007130ECA9150640E6"); log.info("å ³ç¯è¿åç»æ:"+result2); sleep(5000); //// å¼10 // String result1 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", // "FEA501000BFE010003FFFF0AA542FD69D4E6194E"); // log.info("å¼ç¯è¿åç»æ:"+result1); // sleep(5000); //// å ³ // String result2 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", // "FEA501000BFE0100030001007130ECA9150640E6"); // log.info("å ³ç¯è¿åç»æ:"+result2); // sleep(5000); //// å¿è·³æ¥è¯¢ String result3 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", "FEA501000AFE110002FFFF26008FBE3DAC7C0D"); log.info("å¿è·³æ¥è¯¢è¿åç»æ:"+result3); sleep(3000); String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", "FEA501001AFE230012FE23000A00017F1019647F111E005428F600EC64EC194EA28A7C"); log.info("宿¶ä»»å¡è¿åç»æ:"+result4); sleep(3000); // String result3 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff", // "FEA501000AFE110002FFFF26008FBE3DAC7C0D"); // log.info("å¿è·³æ¥è¯¢è¿åç»æ:"+result3); // sleep(1000); // String result = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff", // "FEA501000CFE210004FFFF001E9BB444E9C75BDB49"); // log.info("å¿è·³è®¾ç½®è¿åç»æ:"+result); // sleep(1000); //// 设置å¿è·³30ç§ // String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff", // "FEA501000AFE110002FFFF26008FBE3DAC7C0D"); // log.info("å¿è·³æ¥è¯¢è¿åç»æ:"+result4); // sleep(1000); // String result5 = MqttClientUtil.sendMqttMsg("363832544e5008ff4734ffff", // "FEA501000CFE210004FFFF001E9BB444E9C75BDB49"); // log.info("å¿è·³æ¥è¯¢è¿åç»æ:"+result5); // sleep(1000); // String result4 = MqttClientUtil.sendMqttMsg("363832544e5008ff3a32ffff", // "FEA501001AFE230012FE23000A00017F1019647F111E005428F600EC64EC194EA28A7C"); // log.info("宿¶ä»»å¡è¿åç»æ:"+result4); // sleep(3000); System.out.println("龿¥ç¶æï¼---"+i+"---:"); System.out.println(localMqttConnectStatusMap.get("363832544e5008ff3a32ffff")); sleep(3000); boolean set = RedisUtils.getBean().set(localMqttConnectStatus+"363832544e5008ff4734ffff",0); System.out.println(set); System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff")); System.out.println("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff"))); System.out.println("------------"); // System.out.println("龿¥ç¶æï¼---"+i+"---:"); // System.out.println(RedisUtils.getBean().get(localMqttConnectStatus+"363832544e5008ff4734ffff")); sleep(1000); } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -18,6 +18,7 @@ import com.sandu.ximon.admin.manager.iot.rrpc.topic.IBaseTopic; import com.sandu.ximon.admin.manager.iot.rrpc.topic.ICustomizeTopic; import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils; import com.sandu.ximon.admin.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -26,7 +27,8 @@ import java.util.List; import java.util.Map; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatus; /** * @author chenjiantian @@ -195,11 +197,10 @@ BatchGetDeviceStateResponse.DeviceStatus deviceStatus = new BatchGetDeviceStateResponse.DeviceStatus(); deviceStatus.setDeviceName(l); if (localMqttConnectStatusMap.get(l)!=null && localMqttConnectStatusMap.get(l)== 0){ deviceStatus.setStatus("OFFLINE"); }else { if ("1".equals(RedisUtils.getBean().get(localMqttConnectStatus+l))){ deviceStatus.setStatus("ONLINE"); }else { deviceStatus.setStatus("OFFLINE"); } statusList.add(deviceStatus); }); ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -53,7 +53,28 @@ System.out.println("nvInit(sdk åå§å):"); System.out.println(instance.nvInit(rootDir, companyInfo)); StatusVO searchVO = new StatusVO(); System.out.println("ViplexCore Demo nvSearchTerminalAsync(æç´¢) begin... "); CountDownLatch countDownLatch1 = new CountDownLatch(1); instance.nvSearchTerminalAsync(new ViplexCore.CallBack() { @Override public void dataCallBack(int code, String data) { searchVO.setStatusCode(code); searchVO.setStatusData(data); loginInfo = data; System.out.println("\nViplexCore æç´¢ code:" + code); System.out.println("\nViplexCore æç´¢ data:" + data); countDownLatch1.countDown(); } }); try { countDownLatch1.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } // login("MZVA51930N2113017308"); } @@ -78,28 +99,6 @@ * 5ï¼å ¬ç½SDKç»å½ */ public StatusVO login(String sn, Integer loginType) { StatusVO searchVO = new StatusVO(); System.out.println("ViplexCore Demo nvSearchTerminalAsync(æç´¢) begin... "); CountDownLatch countDownLatch1 = new CountDownLatch(1); instance.nvSearchTerminalAsync(new ViplexCore.CallBack() { @Override public void dataCallBack(int code, String data) { searchVO.setStatusCode(code); searchVO.setStatusData(data); loginInfo = data; System.out.println("\nViplexCore æç´¢ code:" + code); System.out.println("\nViplexCore æç´¢ data:" + data); countDownLatch1.countDown(); } }); try { countDownLatch1.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } if (loginSn.get(sn) != null && loginSn.get(sn) && loginType == 0) { return new StatusVO(0); @@ -945,15 +944,18 @@ newNova.setScreenShot(data); } countDownLatch.countDown(); try { countDownLatch.await(5000, TimeUnit.MILLISECONDS); } catch (InterruptedException ex) { throw new RuntimeException(ex); } } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return param.getScreenShotList(); } ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -51,7 +51,6 @@ import java.util.*; import java.util.stream.Collectors; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap; /** * @author chenjiantian @@ -88,6 +87,14 @@ light.setLight2Percent(heartBeatDataPackage.getLight2Percent()); save(light); log.info("æ°å¢è·¯ç¯"); Pole pole = new Pole(); pole.setDeviceCode(deviceName); pole.setPoleName(deviceName); pole.setDeviceType(0); pole.setPoleCode(SpringContextHolder.getBean(PoleService.class).generatePoleCode()); boolean result = SpringContextHolder.getBean(PoleService.class).saveOrUpdate(pole); log.info("æ°å¢ç¯æï¼"+result); } redisService.set(LightKey.REPORT_MAC.key(deviceName), 1, LightKey.REPORT_MAC.expireSeconds()); } else { @@ -1032,22 +1039,22 @@ public void timeSynchronizationInitiative(String deviceCode, String lightAddress) { //åç¯ä¿¡æ¯ Light light = getLight(deviceCode); // if (light == null) { // log.error("åç¯ä¸»å¨åæ¥æ¶é´è¯·æ±å¼å¸¸ï¼åç¯ä¿¡æ¯ä¸åå¨ï¼"); // return; // } if (light == null) { log.error("åç¯ä¸»å¨åæ¥æ¶é´è¯·æ±å¼å¸¸ï¼åç¯ä¿¡æ¯ä¸åå¨ï¼"); return; } //åç¯ä»»å¡ä¿¡æ¯ LightTaskPoleRelation lightTaskPoleRelation = SpringContextHolder.getBean(LightTaskPoleRelationService.class) .getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class) .eq(LightTaskPoleRelation::getDeviceCode, deviceCode).eq(LightTaskPoleRelation::getLightAddress, lightAddress)); // LightTaskPoleRelation lightTaskPoleRelation = SpringContextHolder.getBean(LightTaskPoleRelationService.class) // .getOne(Wrappers.lambdaQuery(LightTaskPoleRelation.class) // .eq(LightTaskPoleRelation::getDeviceCode, deviceCode).eq(LightTaskPoleRelation::getLightAddress, lightAddress)); LightTask lightTask = null; //ç¯å¤´æ²¡æä»»å¡ if (lightTaskPoleRelation != null) { if (lightTaskPoleRelation.getDeviceScheduled() != null) { lightTask = JSONObject.parseObject(lightTaskPoleRelation.getDeviceScheduled(), LightTask.class); } } // //ç¯å¤´æ²¡æä»»å¡ // if (lightTaskPoleRelation != null) { // if (lightTaskPoleRelation.getDeviceScheduled() != null) { // lightTask = JSONObject.parseObject(lightTaskPoleRelation.getDeviceScheduled(), LightTask.class); // } // } timeSynchronization(light, lightAddress, lightTask); @@ -1060,16 +1067,18 @@ * @param lightTask åç¯ä»»å¡å®ä½ï¼ä¸ºç©ºæ è¯åç¯æ²¡æå®æ¶ä»»å¡ï¼ */ public void timeSynchronization(Light light, String lightAddress, LightTask lightTask) { lightTask = null; LightTask finalLightTask = lightTask; new Thread(new Runnable() { @Override public void run() { //è·åå½åæ¶é´æ¶ãå Calendar cal = Calendar.getInstance(); if (lightTask != null) { String closeOrder = lightTask.getCloseOrder(); String openOrder = lightTask.getOpenOrder(); String controlOrder = lightTask.getControlOrder() == null ? null : lightTask.getControlOrder(); if (finalLightTask != null) { String closeOrder = finalLightTask.getCloseOrder(); String openOrder = finalLightTask.getOpenOrder(); String controlOrder = finalLightTask.getControlOrder() == null ? null : finalLightTask.getControlOrder(); List<String> timeList = new ArrayList<>(); timeList.add(openOrder.substring(0, 4)); ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -60,7 +60,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import static com.sandu.ximon.admin.localMQTT.callback.StatusMqttCallBack.localMqttConnectStatusMap; /** * ç¯æç¸å ³ @@ -1066,20 +1065,7 @@ } } } // List<DeviceStatus> statusList = new ArrayList<>(); // // deviceCodeList.forEach(l -> { // DeviceStatus deviceStatus = new DeviceStatus(); // deviceStatus.setDeviceCode(l); // // if (localMqttConnectStatusMap.get(l)!=null && // localMqttConnectStatusMap.get(l)== 1){ // deviceStatus.setStatus(1); // }else { // deviceStatus.setStatus(0); // } // statusList.add(deviceStatus); // }); return statusList; } ximon-admin/src/main/resources/application-xm_lj.ymlcopy from ximon-admin/src/main/resources/application-xm.yml copy to ximon-admin/src/main/resources/application-xm_lj.yml
Îļþ´Ó ximon-admin/src/main/resources/application-xm.yml ¸´ÖÆ @@ -1,16 +1,17 @@ spring: # ä¸½æ±æ¬å°é¨ç½²é¡¹ç® datasource: # æ°æ®åºç¨æ·å username: root # æ°æ®åºå¯ç password: zhxm2512209 url: jdbc:mysql://39.103.154.108:2512/xm_dev?useUnicode=true&autoReconnect=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai url: jdbc:mysql://127.0.0.1:2512/xm?useUnicode=true&autoReconnect=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai type: com.alibaba.druid.pool.DruidDataSource druid: connection-init-sqls: set names utf8mb4 driver-class-name: com.mysql.cj.jdbc.Driver redis: host: 39.103.154.108 host: 127.0.0.1 password: zhxm2512209 port: 6379 database: 0 @@ -32,7 +33,7 @@ #************************æ¬å°ä¸ä¼ æä»¶é ç½®************************ upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: D:\project20000\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ @@ -45,7 +46,7 @@ isOpen: false minio: endpoint: 47.106.172.9 endpoint: 10.10.1.100 port: 9000 accessKey: minioadmin secretKey: zhxm2512209 @@ -85,15 +86,20 @@ #æ°è¯ºç¦ new-nova: #ä¾èµå°å string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll string-path: D:\project20000\file\novaWin\bin\viplexcore.dll #èç®çæè·¯å¾ out-put-path: D:\project20000\file\temp new-nova-file: upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: D:\project20000\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ file-url: http://10.10.1.100:20017/file/ #è¯ºç¦æªå±åæ¾è·¯å¾ æä»¶å¤¹å¿ é¡»åå¨ ä¸æ¯æå¡å¨æä»¶è·¯å¾(upload-root-path)ä¸çåæä»¶å¤¹ screen-shot-path: D:\project20000\file\screenShot\ customer: mqtt: @@ -109,7 +115,7 @@ password: zhxm2512209 #ä¸åä¸»é¢ publishTopic: v1/devices/request/ #çå¬ä¸ä¸çº¿ #çå¬ä¸ä¸çº¿ - clientId: java_server_status #çå¬ä¸»é¢ subscribeTopic: $SYS/brokers/+/clients/# @@ -119,3 +125,4 @@ password: zhxm2512209 #ä¸åä¸»é¢ publishTopic: v1/devices/request/ ximon-admin/src/main/resources/application-xm_local.yml
ÎļþÃû´Ó ximon-admin/src/main/resources/application-xm.yml ÐÞ¸Ä @@ -1,4 +1,5 @@ spring: # 叿¢¦æ¬å°å¼å datasource: # æ°æ®åºç¨æ·å username: root @@ -32,7 +33,7 @@ #************************æ¬å°ä¸ä¼ æä»¶é ç½®************************ upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: D:\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ @@ -85,15 +86,20 @@ #æ°è¯ºç¦ new-nova: #ä¾èµå°å string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll string-path: D:\file\novaWin\bin\viplexcore.dll #èç®çæè·¯å¾ out-put-path: D:\file\temp new-nova-file: upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: D:\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ file-url: http://192.168.0.12:20017/file/ #è¯ºç¦æªå±åæ¾è·¯å¾ æä»¶å¤¹å¿ é¡»åå¨ ä¸æ¯æå¡å¨æä»¶è·¯å¾(upload-root-path)ä¸çåæä»¶å¤¹ screen-shot-path: D:\file\screenShot\ customer: mqtt: @@ -109,7 +115,7 @@ password: zhxm2512209 #ä¸åä¸»é¢ publishTopic: v1/devices/request/ #çå¬ä¸ä¸çº¿ #çå¬ä¸ä¸çº¿ - clientId: java_server_status #çå¬ä¸»é¢ subscribeTopic: $SYS/brokers/+/clients/# @@ -119,3 +125,4 @@ password: zhxm2512209 #ä¸åä¸»é¢ publishTopic: v1/devices/request/ ximon-admin/src/main/resources/application.yml
@@ -1,6 +1,6 @@ spring: profiles: active: xm active: xm_local jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8