|
@@ -22,8 +22,11 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
|
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
|
|
|
import org.eclipse.paho.client.mqttv3.MqttTopic;
|
|
|
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import javax.annotation.PostConstruct;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
@@ -36,79 +39,28 @@ import java.util.UUID;
|
|
|
* @author Administrator
|
|
|
*/
|
|
|
@Slf4j
|
|
|
+@Component
|
|
|
public class PublishClient {
|
|
|
+
|
|
|
/**
|
|
|
* mqtt服务器地址
|
|
|
*/
|
|
|
- public static final String HOST = "tcp://124.70.58.209:1883";
|
|
|
- /**
|
|
|
- * 主题
|
|
|
- */
|
|
|
- private final String topic;
|
|
|
+ public static String HOST;
|
|
|
+ public static String USER_NAME;
|
|
|
+ public static String PASS_WORD;
|
|
|
+ private static String clientId;
|
|
|
/**
|
|
|
* 客户端实例
|
|
|
*/
|
|
|
- private final MqttClient client;
|
|
|
- /**
|
|
|
- * 主题实例
|
|
|
- */
|
|
|
- private MqttTopic topic11;
|
|
|
- private static final String USER_NAME = "guest";
|
|
|
- private static final String PASS_WORD = "guest";
|
|
|
- private MqttMessage message;
|
|
|
+ private static MqttClient client;
|
|
|
+ @Autowired
|
|
|
+ private RabbitMqConfig rabbitMqConfig;
|
|
|
|
|
|
/**
|
|
|
- * 初始化客户端实例
|
|
|
- *
|
|
|
- * @param topic
|
|
|
- * @param clientId
|
|
|
- * @throws MqttException
|
|
|
+ * 获取 MqttTopic
|
|
|
*/
|
|
|
- public PublishClient(String topic, String clientId) throws MqttException {
|
|
|
- /**
|
|
|
- * mqtt 客户机ID
|
|
|
- * heart_DEVICESN
|
|
|
- */
|
|
|
- this.topic = topic;
|
|
|
- /**
|
|
|
- * MemoryPersistence设置clientId的保存形式,默认为以内存保存
|
|
|
- */
|
|
|
- client = new MqttClient(HOST, clientId, new MemoryPersistence());
|
|
|
- connect();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 连接服务器
|
|
|
- */
|
|
|
- private void connect() {
|
|
|
- /**
|
|
|
- * 连接配置
|
|
|
- */
|
|
|
- MqttConnectOptions options = new MqttConnectOptions();
|
|
|
- /**
|
|
|
- * 不保存,每次重启新client
|
|
|
- */
|
|
|
- options.setCleanSession(true);
|
|
|
- options.setUserName(USER_NAME);
|
|
|
- options.setPassword(PASS_WORD.toCharArray());
|
|
|
- /**
|
|
|
- * 设置超时时间
|
|
|
- */
|
|
|
- options.setConnectionTimeout(10);
|
|
|
- /**
|
|
|
- * 设置会话心跳时间
|
|
|
- */
|
|
|
- options.setKeepAliveInterval(20);
|
|
|
- try {
|
|
|
- /**
|
|
|
- * 设置发布回调
|
|
|
- */
|
|
|
- client.setCallback(new PublishCallback());
|
|
|
- client.connect(options);
|
|
|
- topic11 = client.getTopic(topic);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+ public static MqttTopic getMqttTopic(String topic) {
|
|
|
+ return client.getTopic(topic);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -119,18 +71,17 @@ public class PublishClient {
|
|
|
* @throws MqttPersistenceException
|
|
|
* @throws MqttException
|
|
|
*/
|
|
|
- public void publish(MqttTopic topic, MqttMessage message) throws MqttPersistenceException,
|
|
|
+ public static void publish(MqttTopic topic, MqttMessage message) throws MqttPersistenceException,
|
|
|
MqttException {
|
|
|
MqttDeliveryToken token = topic.publish(message);
|
|
|
token.waitForCompletion();
|
|
|
System.out.println("message is published completely! " + token.isComplete());
|
|
|
}
|
|
|
|
|
|
- public static void pull(String sign, String deviceSn) throws MqttException, InterruptedException {
|
|
|
+ public static void pull(String sign, String deviceSn) throws MqttException {
|
|
|
/**
|
|
|
* 发布客户端
|
|
|
*/
|
|
|
- PublishClient server = new PublishClient("heart_" + deviceSn, "heart_" + deviceSn);
|
|
|
Heartbeat test = new Heartbeat();
|
|
|
test.setName("HeartResponse");
|
|
|
Data data = new Data();
|
|
@@ -140,11 +91,11 @@ public class PublishClient {
|
|
|
test.setCode(200);
|
|
|
test.setSign(sign);
|
|
|
String s = JSON.toJSONString(test);
|
|
|
- server.message = new MqttMessage();
|
|
|
+ MqttMessage message = new MqttMessage();
|
|
|
/**
|
|
|
* 保证消息能到达一次
|
|
|
*/
|
|
|
- server.message.setQos(1);
|
|
|
+ message.setQos(1);
|
|
|
/**
|
|
|
* 消息保留
|
|
|
*/
|
|
@@ -152,11 +103,11 @@ public class PublishClient {
|
|
|
/**
|
|
|
* 消息内容
|
|
|
*/
|
|
|
- server.message.setPayload(s.getBytes());
|
|
|
+ message.setPayload(s.getBytes());
|
|
|
/**
|
|
|
* 发布
|
|
|
*/
|
|
|
- server.publish(server.topic11, server.message);
|
|
|
+ publish(getMqttTopic("heart_" + deviceSn), message);
|
|
|
}
|
|
|
|
|
|
public static void updateDeviceSn(BaseCameraVersionVo baseCameraVersionVo) {
|
|
@@ -166,7 +117,6 @@ public class PublishClient {
|
|
|
log.info("updateDeviceSn---start");
|
|
|
for (String code : baseCameraVersionVo.getCameraCodeList()) {
|
|
|
try {
|
|
|
- PublishClient server = new PublishClient("update_" + code, "update_" + code);
|
|
|
log.info("update_" + code);
|
|
|
UpdateDeviceSn updateDeviceSn = new UpdateDeviceSn();
|
|
|
updateDeviceSn.setName("UpdateRequest");
|
|
@@ -175,11 +125,11 @@ public class PublishClient {
|
|
|
updateDeviceSn.setSign(IdUtils.fastSimpleUUID());
|
|
|
updateDeviceSn.setUrl(baseCameraVersionVo.getVersionAddress());
|
|
|
String s = JSON.toJSONString(updateDeviceSn);
|
|
|
- server.message = new MqttMessage();
|
|
|
+ MqttMessage message = new MqttMessage();
|
|
|
/**
|
|
|
* 保证消息能到达一次
|
|
|
*/
|
|
|
- server.message.setQos(1);
|
|
|
+ message.setQos(1);
|
|
|
/**
|
|
|
* 消息保留
|
|
|
*/
|
|
@@ -187,25 +137,24 @@ public class PublishClient {
|
|
|
/**
|
|
|
* 消息内容
|
|
|
*/
|
|
|
- server.message.setPayload(s.getBytes());
|
|
|
+ message.setPayload(s.getBytes());
|
|
|
/**
|
|
|
* 发布
|
|
|
*/
|
|
|
- server.publish(server.topic11, server.message);
|
|
|
+ publish(getMqttTopic("update_" + code), message);
|
|
|
log.info("updateDeviceSn---end");
|
|
|
} catch (MqttException e) {
|
|
|
- System.out.println("updateDeviceSn-------"+e.getMessage());
|
|
|
+ System.out.println("updateDeviceSn-------" + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void confidenceCoefficient(BaseCameraVersionVo baseCameraVersionVo,String value) {
|
|
|
+ public static void confidenceCoefficient(BaseCameraVersionVo baseCameraVersionVo, String value) {
|
|
|
/**
|
|
|
* 发布客户端
|
|
|
*/
|
|
|
for (String code : baseCameraVersionVo.getCameraCodeList()) {
|
|
|
try {
|
|
|
- PublishClient server = new PublishClient("config_" + code, "config_" + code);
|
|
|
JSONObject res = new JSONObject();
|
|
|
res.put("Name", "ConfigRequest");
|
|
|
Svp svp = new Svp();
|
|
@@ -215,39 +164,38 @@ public class PublishClient {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("svp", svp);
|
|
|
res.put("data", map);
|
|
|
- res.put("sign", "cien"+IdUtils.fastSimpleUUID());
|
|
|
+ res.put("sign", "cien" + IdUtils.fastSimpleUUID());
|
|
|
String s = JSONObject.toJSONString(res);
|
|
|
|
|
|
- server.message = new MqttMessage();
|
|
|
+ MqttMessage message = new MqttMessage();
|
|
|
/**
|
|
|
* 保证消息能到达一次
|
|
|
*/
|
|
|
- server.message.setQos(1);
|
|
|
+ message.setQos(1);
|
|
|
/**
|
|
|
* 消息保留
|
|
|
*/
|
|
|
-// server.message.setRetained(false);
|
|
|
+// message.setRetained(false);
|
|
|
/**
|
|
|
* 消息内容
|
|
|
*/
|
|
|
- server.message.setPayload(s.getBytes());
|
|
|
+ message.setPayload(s.getBytes());
|
|
|
/**
|
|
|
* 发布
|
|
|
*/
|
|
|
- server.publish(server.topic11, server.message);
|
|
|
+ publish(getMqttTopic("config_" + code), message);
|
|
|
} catch (MqttException e) {
|
|
|
System.out.println(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void configFrameRate(BaseCameraVersionVo baseCameraVersionVo,String value) {
|
|
|
+ public static void configFrameRate(BaseCameraVersionVo baseCameraVersionVo, String value) {
|
|
|
/**
|
|
|
* 发布客户端
|
|
|
*/
|
|
|
for (String code : baseCameraVersionVo.getCameraCodeList()) {
|
|
|
try {
|
|
|
- PublishClient server = new PublishClient("config_" + code, "config_" + code);
|
|
|
JSONObject res = new JSONObject();
|
|
|
res.put("Name", "ConfigRequest");
|
|
|
Codec codec = new Codec();
|
|
@@ -257,29 +205,69 @@ public class PublishClient {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("codec", codec);
|
|
|
res.put("data", map);
|
|
|
- res.put("sign", "rate"+IdUtils.fastSimpleUUID());
|
|
|
+ res.put("sign", "rate" + IdUtils.fastSimpleUUID());
|
|
|
String s = JSONObject.toJSONString(res);
|
|
|
|
|
|
- server.message = new MqttMessage();
|
|
|
+ MqttMessage message = new MqttMessage();
|
|
|
/**
|
|
|
* 保证消息能到达一次
|
|
|
*/
|
|
|
- server.message.setQos(1);
|
|
|
+ message.setQos(1);
|
|
|
/**
|
|
|
* 消息保留
|
|
|
*/
|
|
|
-// server.message.setRetained(false);
|
|
|
+// message.setRetained(false);
|
|
|
/**
|
|
|
* 消息内容
|
|
|
*/
|
|
|
- server.message.setPayload(s.getBytes());
|
|
|
+ message.setPayload(s.getBytes());
|
|
|
/**
|
|
|
* 发布
|
|
|
*/
|
|
|
- server.publish(server.topic11, server.message);
|
|
|
+ publish(getMqttTopic("config_" + code), message);
|
|
|
} catch (MqttException e) {
|
|
|
System.out.println(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @PostConstruct
|
|
|
+ public void init() {
|
|
|
+ HOST = rabbitMqConfig.getHost();
|
|
|
+ USER_NAME = rabbitMqConfig.getUserName();
|
|
|
+ PASS_WORD = rabbitMqConfig.getPassword();
|
|
|
+ clientId = rabbitMqConfig.getClientId();
|
|
|
+ /**
|
|
|
+ * 连接配置
|
|
|
+ */
|
|
|
+ MqttConnectOptions options = new MqttConnectOptions();
|
|
|
+ /**
|
|
|
+ * 不保存,每次重启新client
|
|
|
+ */
|
|
|
+ options.setCleanSession(true);
|
|
|
+ options.setUserName(USER_NAME);
|
|
|
+ options.setPassword(PASS_WORD.toCharArray());
|
|
|
+ /**
|
|
|
+ * 设置超时时间
|
|
|
+ */
|
|
|
+ options.setConnectionTimeout(10);
|
|
|
+ /**
|
|
|
+ * 设置会话心跳时间
|
|
|
+ */
|
|
|
+ options.setKeepAliveInterval(20);
|
|
|
+ try {
|
|
|
+ /**
|
|
|
+ * 设置发布回调
|
|
|
+ */
|
|
|
+ client = new MqttClient(HOST, clientId, new MemoryPersistence());
|
|
|
+
|
|
|
+ client.setCallback(new PublishCallback());
|
|
|
+ client.connect(options);
|
|
|
+ int[] Qos = {1};
|
|
|
+ String[] topic1 = {"config", "update", "heart", "test"};
|
|
|
+ client.subscribe(topic1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|