MQTT 消息推送详解
#MQTT 消息推送详解MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,专为低带宽、高延迟或不稳定网络环境设计,非常适合物联网设备通信、移动消息推送等场景。一、MQTT 核心概念- **Broker(代理/服务器)**:消息的中转中心,负责接收客户端发布的消息并推送给订阅了对应主题的客户端。- **Publisher(发布者)**:发送消息到某个主题的客户端。- **Subscriber(订阅者)**:订阅一个或多个主题,接收该主题下的消息。- **Topic(主题)**:消息的标签,支持层级结构,如 `sensor/temperature/room1`。- **QoS(服务质量)**: - **0**:最多一次(可能丢失) - **1**:至少一次(保证到达,可能重复) - **2**:恰好一次(保证到达且不重复)- **Will Message(遗愿消息)**:客户端异常断开时,Broker 自动发布的预设消息。- **Retained Message(保留消息)**:Broker 为每个主题保留最后一条消息,新订阅者能立即收到。二、MQTT 在 Android 上的实现(推送)Android 端作为 MQTT 客户端,可以订阅主题接收实时推送,也可以发布数据到云端。1. 添加依赖推荐使用 **Eclipse Paho Android Service**(支持后台长连接、断线重连):```groovydependencies { implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'}```如果目标 API ≥ 21(Android 5.0+),还需添加 `android:usesCleartextTraffic="true"`(若 broker 未使用 TLS)。2. 在 AndroidManifest.xml 中声明服务和权限```xmluses-permission android:name="android.permission.INTERNET" /uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /uses-permission android:name="android.permission.WAKE_LOCK" /service android:name="org.eclipse.paho.android.service.MqttService" /```3. 初始化 MQTT 客户端并连接```kotlinimport org.eclipse.paho.android.service.MqttAndroidClientimport org.eclipse.paho.client.mqttv3.*class MqttPushManager(context: Context, serverUri: String, clientId: String) { private val mqttClient = MqttAndroidClient(context, serverUri, clientId) private v