mqtt 测试

mqtt 测试

docker部署开源 mqtt broker 【eclipse-mosquitto】

bash 复制代码
docker run -d \
  --name mqtt \
  -p 1883:1883 -p 9001:9001 -p 9883:9883 \
  -v ./mqtt.conf:/mosquitto/config/mosquitto.conf \
  eclipse-mosquitto

mqtt.conf 增加websocet监听

yaml 复制代码
# This is a Mosquitto configuration file that creates a listener on port 1883
# that allows unauthenticated access.
listener 1883
allow_anonymous true

listener 9883
protocol http_api
http_dir /usr/share/mosquitto/dashboard

# WebSocket 监听
listener 9001
protocol websockets

vue中使用mqtt库

  1. 安装mqtt依赖
bash 复制代码
npm install mqtt

注: vue3 bable.config.js 添加配置,否则启动报错

js 复制代码
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  // 新增plugins
  plugins: [
    '@babel/plugin-transform-private-methods'
  ]
}
  1. mqtt工具
js 复制代码
import mqtt from 'mqtt'

// 9001 是 broker开放的websocket端口
const MQTT_URL = 'ws://localhost:9001/mqtt'

let client = null

/**
 * 获取 MQTT 客户端(单例)
 */
export function getMqttClient(topic) {
  if (!client) {
    client = mqtt.connect(MQTT_URL, {
      clientId: `vue2_${Math.random().toString(16).slice(2)}`,
      clean: true,
      reconnectPeriod: 4000,
      connectTimeout: 5000
    })

    client.on('connect', () => {
      console.log('[MQTT] connected')
      
      client.subscribe(topic)
      console.log('subscribe: ', topic)
    })

    client.on('error', err => {
      console.error('[MQTT] error', err)
    })

    client.on('close', () => {
      console.log('[MQTT] disconnected')
    })
  }

  return client
}

java模拟设备上报数据

  1. 引用maven依赖
xml 复制代码
 <dependency>
     <groupId>org.eclipse.paho</groupId>
     <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
     <version>1.2.5</version>
</dependency>
  1. 上报数据
java 复制代码
public static void main(String[] args) throws MqttException, InterruptedException {
    String broker = "tcp://localhost:1883";
    String clientId = "java-device-001";
    String topic = "device/temp";

    MqttClient client = new MqttClient(broker, clientId);
    MqttConnectOptions options = new MqttConnectOptions();
    options.setCleanSession(true);

    client.connect(options);
    System.out.println("✅ Connected to MQTT Broker");

    // 模拟温度上报

    for (int i = 0; i < 50000; i++) {
        String payload = "{\"temp\": " + (20 + i) + "}";
        MqttMessage message = new MqttMessage(payload.getBytes());
        message.setQos(1);
        client.publish(topic, message);
        System.out.println("📤 Published: " + payload);
        Thread.sleep(2000);
    }

    client.disconnect();
    client.close();
    System.out.println("模拟数据上报关闭!!!");
}
相关推荐
代码丰1 小时前
使用 TtlExecutors 解决线程池中的 ThreadLocal 上下文丢失问题
后端
张鑫旭2 小时前
都AI时代了,我为何还在学习前端基础知识?
前端
swipe2 小时前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试
阿祖zu2 小时前
别再优化 RAG 了,适配 Agent 的 LLM Wiki 知识库理念
前端·后端·aigc
kyriewen2 小时前
前端错误监控最全指南:捕获 JS 异常、Promise 拒绝、资源加载失败,附上报代码
前端·javascript·监控
昵称为空C2 小时前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
狗哥哥3 小时前
船队运营可视化技术方案
前端
用户8356290780513 小时前
用 Python 自动化 PowerPoint 演讲者备注添加
后端·python
大家的林语冰3 小时前
ESLint 近期动态大全,新版本正式发布,antfu 大佬推荐的插件也更新了!
前端·javascript·前端工程化