|
@@ -1,125 +0,0 @@
|
|
-package com.huaxia.imes.mqtt;
|
|
|
|
-
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
-import org.eclipse.paho.client.mqttv3.*;
|
|
|
|
-import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @author zx
|
|
|
|
- * @since 2024年11月11日
|
|
|
|
- * MQTT 消息生产者
|
|
|
|
- */
|
|
|
|
-@Slf4j
|
|
|
|
-public class MqttProducer {
|
|
|
|
-
|
|
|
|
- public static void main(String[] args) {
|
|
|
|
- String borketUrl = "tcp://117.72.113.54:1883";
|
|
|
|
- String clientId = "demo_client"+System.currentTimeMillis();
|
|
|
|
- String subTopic = "TestTopic";
|
|
|
|
- int Qos = 1;
|
|
|
|
- String userName = "admin";
|
|
|
|
- String password = "public";
|
|
|
|
- // MQTT 连接选项设置连接参数
|
|
|
|
- MqttConnectOptions options = buildMqttConnectOptions(userName, password);
|
|
|
|
- // 内存存储
|
|
|
|
- MemoryPersistence persistence = new MemoryPersistence();
|
|
|
|
- try {
|
|
|
|
- // 创建客户端
|
|
|
|
- MqttClient client = new MqttClient(borketUrl, clientId, persistence);
|
|
|
|
- // 设置超时时间
|
|
|
|
- client.setTimeToWait(5000);
|
|
|
|
- // 设置回调
|
|
|
|
- client.setCallback(new MqttCallbackExtended() {
|
|
|
|
- // 连接断开
|
|
|
|
- @Override
|
|
|
|
- public void connectionLost(Throwable throwable) {
|
|
|
|
- log.error("连接断开");
|
|
|
|
- try {
|
|
|
|
- log.info("连接断开,正在重连>>>>>>");
|
|
|
|
- Thread.sleep(5000);
|
|
|
|
- client.connect(options);
|
|
|
|
- log.info("重连成功");
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("连接断开异常{}", e.getMessage());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 消息到达
|
|
|
|
- @Override
|
|
|
|
- public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
|
|
|
|
- log.info("发送消息内容:" + new String(mqttMessage.getPayload()));
|
|
|
|
- log.info("消息主题:" + s);
|
|
|
|
- log.info("消息质量:" + mqttMessage.getQos());
|
|
|
|
- log.info("消息是否重复:" + mqttMessage.isDuplicate());
|
|
|
|
- log.info("消息是否已发布:" + mqttMessage.isRetained());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 发布完成
|
|
|
|
- @Override
|
|
|
|
- public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
|
|
|
|
- log.info("发布完成客户端信息:{}",iMqttDeliveryToken.getClient().getClientId());
|
|
|
|
- }
|
|
|
|
- // 连接完成
|
|
|
|
- @Override
|
|
|
|
- public void connectComplete(boolean b, String s) {
|
|
|
|
- log.info("连接完成{}",s);
|
|
|
|
- log.info("b{}",b);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- // 连接
|
|
|
|
- client.connect(options);
|
|
|
|
- // 订阅主题
|
|
|
|
- client.subscribe(subTopic);
|
|
|
|
- //循环发送消息
|
|
|
|
- boolean keepSending = true;
|
|
|
|
- int i = 0;
|
|
|
|
- while (keepSending) {
|
|
|
|
- // 控制发送次数
|
|
|
|
- i++;
|
|
|
|
- // 发布消息
|
|
|
|
- MqttMessage message = new MqttMessage(("第" + i + "只杨羊").getBytes());
|
|
|
|
- // 设置消息质量
|
|
|
|
- message.setQos(Qos);
|
|
|
|
- // 发布消息
|
|
|
|
- client.publish(subTopic, message);
|
|
|
|
- // 控制发送频率
|
|
|
|
- Thread.sleep(1000); // 每秒发送一次
|
|
|
|
- if (i >= 1000) { // 发送 10 次后停止
|
|
|
|
- keepSending = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // 断开连接
|
|
|
|
- client.disconnect();
|
|
|
|
- // 关闭客户端
|
|
|
|
- client.close();
|
|
|
|
-
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("连接异常{}", e.getMessage());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 构建连接参数
|
|
|
|
- *
|
|
|
|
- * @param userName
|
|
|
|
- * @param password
|
|
|
|
- * @return
|
|
|
|
- */
|
|
|
|
- private static MqttConnectOptions buildMqttConnectOptions(String userName, String password) {
|
|
|
|
- MqttConnectOptions connOpts = new MqttConnectOptions();
|
|
|
|
- // 连接 MQTT Broker 的用户名密码
|
|
|
|
- connOpts.setUserName(userName);
|
|
|
|
- connOpts.setPassword(password.toCharArray());
|
|
|
|
- // 设置是否清除会话
|
|
|
|
- connOpts.setCleanSession(true);
|
|
|
|
- //心跳间隔
|
|
|
|
- connOpts.setKeepAliveInterval(60);
|
|
|
|
- // 连接超时时间,单位为秒
|
|
|
|
- connOpts.setConnectionTimeout(30);
|
|
|
|
- // 是否自动重连
|
|
|
|
- connOpts.setAutomaticReconnect(true);
|
|
|
|
- return connOpts;
|
|
|
|
- }
|
|
|
|
-}
|
|
|