| ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java | ●●●●● patch | view | raw | blame | history |
ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java
@@ -10,6 +10,6 @@ public class ArdSyCarRtu { private String id; private String carId; private String topicSubscribe; private String topicPublish; private String topicSubscribe; //订阅 private String topicPublish; //发布 } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java
@@ -9,7 +9,8 @@ */ public interface ArdSyCarRtuService { List<ArdSyCarRtu> allCarTopic(); String[] allCarTopic(); List<ArdSyCarRtu> allCarTopicList(); ArdSyCarRtu one(String carId); ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java
@@ -22,7 +22,17 @@ private ArdSyCarRtuMapper ardSyCarRtuMapper; @Override public List<ArdSyCarRtu> allCarTopic() { public String[] allCarTopic() { List<ArdSyCarRtu> carRtus = ardSyCarRtuMapper.selectList(null); List<String> list = new ArrayList<>(); for (int i = 0; i < carRtus.size(); i++) { list.add(carRtus.get(i).getTopicPublish()); } return list.toArray(new String[list.size()]); } @Override public List<ArdSyCarRtu> allCarTopicList() { return ardSyCarRtuMapper.selectList(null); } ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -91,9 +91,6 @@ ArdRadarService ardRadarService = SpringUtils.getBean(ArdRadarService.class); ardRadarService.forceGuide(new String(message.getPayload(), StandardCharsets.UTF_8)); } if(topic.contains("/p")){ System.out.println("车辆锁信息:"+new String(message.getPayload(), StandardCharsets.UTF_8)); } } catch (Exception e) { log.debug("处理mqtt消息异常:" + e); } ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
@@ -5,6 +5,8 @@ import com.ruoyi.sy.service.ArdSyCarRtuService; import com.ruoyi.system.service.ISysConfigService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -31,10 +33,31 @@ public void init() { //获取电磁锁地址 String mqttUrl = sysConfigService.selectConfigByKey("ElectromagneticLockUrl"); List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopic(); List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopicList(); for (int i = 0; i < rtus.size(); i++) { ArdSyCarRtu rtu = rtus.get(i); String publish = rtu.getTopicPublish(); String carId = rtu.getCarId(); String subscribe = rtu.getTopicSubscribe(); try { MqttClient client = new MqttClient(mqttUrl,carId); // log.debug("--创建"+carId+"号车辆电子锁mqtt客户端"); MqttConnectOptions options = new MqttConnectOptions(); //设置用户名密码 options.setUserName("admin"); options.setPassword("xzx12345".toCharArray()); // 设置超时时间 options.setConnectionTimeout(100); // 设置会话心跳时间 options.setKeepAliveInterval(60); // 是否清除session options.setCleanSession(true); // log.debug("--生成"+carId+"号车辆电子锁mqtt配置对象"); client.setCallback(new MqttOnceCallback(client,options,subscribe,2)); // log.debug("--添加车辆电磁锁回调处理类"); client.connect(options); }catch (Exception e) { e.printStackTrace(); } } // MqttConsumer mqttConsumer = new MqttConsumer(); // for (int i = 0; i < topic.length; i++) { ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
New file @@ -0,0 +1,98 @@ package com.ruoyi.utils.mqtt; import com.ruoyi.alarm.global.service.impl.GlobalAlarmServiceImpl; import com.ruoyi.alarm.radar.service.ArdRadarService; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.statistical.service.StatisticalService; import com.ruoyi.storage.minio.service.IStorageMinioEventService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; import java.nio.charset.StandardCharsets; import java.util.Arrays; /** * @Description: mqtt回调处理类 * @ClassName: MqttConsumerCallback * @Author: 刘苏义 * @Date: 2023年05月29日9:55 * @Version: 1.0 **/ @Slf4j(topic = "mqtt") public class MqttOnceCallback implements MqttCallbackExtended { private MqttClient client; private MqttConnectOptions options; private String topic; private int qos; public MqttOnceCallback(MqttClient client, MqttConnectOptions options, String topic, int qos) { this.client = client; this.options = options; this.topic = topic; this.qos = qos; } /** * 断开重连 */ @Override public void connectionLost(Throwable cause) { // log.info("车辆电磁锁MQTT连接断开,发起重连......"); while (!client.isConnected()) { try { Thread.sleep(10000); if (null != client && !client.isConnected()) { client.reconnect(); // log.error("车辆电磁锁尝试重新连接"); } else { client.connect(options); // log.error("车辆电磁锁尝试建立新连接"); } } catch (Exception e) { // log.error("车辆电磁锁断开重连异常:" + e.getMessage()); } } } /** * 接收到消息调用令牌中调用 */ @Override public void deliveryComplete(IMqttDeliveryToken token) { //log.info("deliveryComplete---------" + Arrays.toString(topic)); } /** * 消息处理 */ @Override public void messageArrived(String topic, MqttMessage message) { try { System.out.println("【车辆锁主题】:"+topic+"【车辆锁信息】:"+new String(message.getPayload(), StandardCharsets.UTF_8)); } catch (Exception e) { log.debug("车辆电磁锁处理mqtt消息异常:" + e); } } /** * mqtt连接后订阅主题 */ @Override public void connectComplete(boolean b, String s) { try { if (null != topic) { if (client.isConnected()) { client.subscribe(topic, qos); // log.info("车辆电磁锁mqtt连接成功" ); // log.info("--车辆电磁锁订阅主题::" + topic); } else { log.info("车辆电磁锁mqtt连接失败"); } } } catch (Exception e) { log.info("车辆电磁锁mqtt订阅主题异常:" + e); } } }