【HarmonyOS 5】鸿蒙中如何使用MQTT

简介: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、基于发布 / 订阅(Publish/Subscribe)模式的即时通讯协议,专为资源受限的物联网(IoT)设备和低带宽、高延迟或不可靠网络环境设计。


##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、MQTT是什么?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、基于发布 / 订阅(Publish/Subscribe)模式的即时通讯协议,专为资源受限的物联网(IoT)设备和低带宽、高延迟或不可靠网络环境设计。

目前在物联网,车载,即时通讯,JG领域用的很多。MQTT模式是有个服务器,若干个客户端,订阅Topic作为事件ID,用来订阅广播,发送广播。类似于EventHub和Emitter的发布订阅机制。使用起来很简单。

二、MQTT在鸿蒙中怎么使用?

在鸿蒙(HarmonyOS)中使用MQTT协议主要通过官方提供的@ohos/mqtt库实现。
https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fmqtt

配置依赖:

ohpm install @ohos/mqtt
或者在oh-package.json5中配置:
  "dependencies": {
        "@ohos/mqtt":"2.0.18",
  }

记得配置网络权限:

在module.json5中配置:
    "requestPermissions":[
      {
        "name" : "ohos.permission.INTERNET",
        "reason": "$string:reason_net",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when":"inuse"
        }
      }
    ]
  1. 创建MQTT客户端
    @ohos/mqtt 库的官方文档,该库提供了 同步(MqttClient) 和 异步(MqttAsync) 两种客户端实现。推荐使用 异步客户端(MqttAsync) 以适配 HarmonyOS 的异步编程模型。
import { MqttAsync, MqttConnectOptions } from '@ohos/mqtt';
// 初始化客户端
const mqttClient = MqttAsync.createMqtt({
  clientId: 'device_001', // 唯一客户端ID
  persistenceType: 1, // 内存持久化
});
// 连接参数配置
const connectOptions: MqttConnectOptions = {
  connectTimeout: 30, // 连接超时时间(秒)
  keepAliveInterval: 60, // 心跳间隔(秒)
  username: 'user', // 用户名(可选)
  password: 'password', // 密码(可选)
  cleanStart: true, // 清除会话
  // 若使用TLS,需配置证书
  // enableServerCertAuth: true,
  // caFile: 'ca.crt',
  // clientCertFile: 'device.crt',
  // clientKeyFile: 'device.key',
};
  1. MQTT的连接与断开
// 异步回调方式
mqttClient.connect(connectOptions, (err, data) => {
  if (err) {
    console.error('连接失败:', err);
    return;
  }
  console.log('连接成功:', data);
});
// Promise方式
mqttClient.connect(connectOptions)
  .then(data => console.log('连接成功:', data))
  .catch(err => console.error('连接失败:', err));
// 断开连接
mqttClient.disconnect();
  1. 发布和订阅消息
const publishOptions = {
  topic: 'home/temperature',
  qos: 1, // 服务质量等级(0/1/2)
  payload: JSON.stringify({ value: 25.5 }), // 消息负载
  // 可选:设置消息过期时间(毫秒)
  // messageExpiryInterval: 3600000,
};
// 异步回调方式
mqttClient.publish(publishOptions, (err, data) => {
  if (err) {
    console.error('消息发布失败:', err);
    return;
  }
  console.log('消息发布成功:', data);
});
// Promise方式
mqttClient.publish(publishOptions)
  .then(data => console.log('消息发布成功:', data))
  .catch(err => console.error('消息发布失败:', err));
const subscribeOptions = {
  topic: 'home/temperature',
  qos: 1, // 服务质量等级
};
// 订阅并设置消息回调
mqttClient.subscribe(subscribeOptions, (err, data) => {
  if (err) {
    console.error('订阅失败:', err);
    return;
  }
  console.log('订阅成功:', data);
});
// 接收消息的回调
mqttClient.on('message', (topic, payload) => {
  console.log(`收到消息 [${topic}]:`, payload);
  // 处理消息负载(如解析JSON)
  const data = JSON.parse(payload.toString());
  // 更新UI或业务逻辑
});


三、源码DEMO示例:

import { MqttAsync } from '@ohos/mqtt';
// ---------------------- 基础配置(MQTT 3.1.1 协议) ----------------------
const BROKER_URL = 'mqtt://test.mosquitto.org:1883'; // 公共测试Broker(支持MQTT 3.1.1)
const CLIENT_ID = 'HarmonyOS-MQTT3-Demo';           // 客户端ID(需唯一)
const TOPIC = 'harmonyos/classic/test';             // 订阅/发布主题
const QOS = 1;                                      // 服务质量等级(0/1/2)
// ---------------------- 创建异步客户端 ----------------------
    let client = MqttAsync.createMqtt({
      url: BROKER_URL,
      clientId: CLIENT_ID,
      // 客户端持久化类型(0=文件系统,1=内存,2=自定义)
      persistenceType: 1 // 使用内存持久化(轻量设备推荐)
    })
// ---------------------- 核心功能实现 ----------------------
async function mqttCommunication() {
  try {
    // 1. 连接到Broker(异步方法,返回Promise)
    await client.connect({
      // MQTT 3.1.1 连接参数
      cleanSession: true,       // 清除会话(断开后不保留订阅和消息)
      connectTimeout: 30,       // 连接超时时间(秒)
      keepAliveInterval: 60,    // 心跳间隔(秒),维持长连接
      // 认证信息(若Broker需要)
      userName: 'user',         // 用户名(可选)
      password: 'password',     // 密码(可选)
    });
    console.log('[MQTT 3.1.1] 连接成功');
    // 2. 订阅主题(支持通配符,如 "home/+/temp")
      await client.subscribe({
        topic: TOPIC,
        qos: QOS
      });
    console.log(`[MQTT 3.1.1] 已订阅主题:${TOPIC}(QoS ${QOS})`);
    // 3. 发布消息(字符串或二进制 payload)
    const message = 'Hello from HarmonyOS with MQTT 3.1.1!';
    await client.publish({
      topic: TOPIC,
      payload: message,
      qos: QOS,
      retained: false, // 是否保留消息(Broker存储最后一条消息)
    });
    console.log(`[MQTT 3.1.1] 消息已发布:${message}`);
    // 4. 监听消息接收事件
      client.subscribe({
        topic: TOPIC,
        qos: QOS,
      },(MqttResponse)=>{
        console.log(`[接收消息] 主题:${MqttResponse}`);
      })
  } catch (err) {
    console.error('[MQTT 3.1.1] 操作失败:', err.message);
  }
}
// ---------------------- 启动连接 ----------------------
mqttCommunication();
// ---------------------- 断开连接(如页面销毁时调用) ----------------------
// client.disconnect();
相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
存储 网络协议 物联网
Android集成MQTT教程:实现高效通信和实时消息传输
Android集成MQTT教程:实现高效通信和实时消息传输
4284 0
|
5月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
50785 72
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
8月前
|
弹性计算 人工智能 NoSQL
阿里云服务器8核16G配置:ECS实例规格族、收费标准及活动攻略全解析
本文详解阿里云2026年8核16G ECS配置:涵盖g9i、c9i、hfc7、r9、u1等主流规格族对比,适用场景(Web/API、游戏、AI推理、数据库等),官方收费标准及四大省钱攻略(优选u1、新用户300元券、企业普惠包、按量+节省计划),附真实客户案例与FAQ。
784 5
|
物联网 程序员 芯片
你知道Hi3861芯片吗,支持OpenHarmony系统
本文介绍华为Hi3861芯片,该芯片集成了WiFi和蓝牙功能,具备低功耗、高集成度、强大通信能力和丰富接口资源,广泛应用于智能家居、智能穿戴、工业物联网和智慧城市等领域,助力开发者实现高效物联网解决方案。
1041 0
你知道Hi3861芯片吗,支持OpenHarmony系统
|
移动开发 Dart 前端开发
【HarmonyOS 5】鸿蒙跨平台开发方案详解(二)
作为最早实现鸿蒙适配的跨平台框架,Flutter在社区推动下已形成较完整的技术方案。当前鸿蒙版Flutter已发布3.22.0-ohos版本,该版本基于Flutter 3.22.0核心。
1247 0
|
安全 IDE 开发工具
HarmonyOS实战:解决模拟器启动失败问题
本文介绍了在Windows系统上安装HarmonyOS开发环境时遇到的模拟器启动失败问题及解决方案。为应对鸿蒙可能脱离安卓阵营,开发者需学习HarmonyOS。华为提供的IDE与Android Studio相似,降低了学习成本。但创建鸿蒙模拟器时可能出现报错,官方方案无效时,可通过打开Windows安全中心的“内核隔离”并开启“内存完整性”解决。文章还鼓励初学者收藏内容,并在学习中交流问题。
998 1
HarmonyOS实战:解决模拟器启动失败问题