前言
MQTT - 轻量级的物联网消息传输协议
文章目录 |
---|
MQTT 协议入门与进阶 | EMQ (emqx.com) |
一、概述
MQTT - 是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范,适合需要低功耗和网络带宽有限的IoT场景。

其拥有以下特性
-
发布订阅模式:通过发布订阅模式 Client/Server 的一种传统解耦方案,使得发布者和消费者之间不必预先知道对方的存在;
-
服务质量(Quality of Service,QoS):支持三种级别
- 级别0:尽力而为,消息发送者会想尽办法发送消息,但是遇到意外并不会重试。
- 级别1:至少一次,消息接收者如果没有知会或者知会本身丢失,消息发送者会再次发送以保证消息接收者至少会收到一次,当然可能造成重复消息。
- 级别2:恰好一次,保证这种语义肯待会减少并发或者增加延时,不过丢失或者重复消息是不可接受的时候,级别2是最合适的。
-
支持14种不同的消息类型
- CONNECT:客户端连接到MQTT代理;
- CONNACK:连接确认;
- PUBLISH:新发布消息;
- PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复;
- PUBREC:QoS 2消息流的第一部分,表示消息发布已记录;
- PUBREL:QoS 2消息流的第二部分,表示消息发布已释放;
- PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成;
- SUBSCRIBE:客户端订阅某个主题;
- SUBACK:对于SUBSCRIBE消息的确认;
- UNSUBSCRIBE:客户端终止订阅的消息;
- UNSUBACK:对于UNSUBSCRIBE消息的确认;
- PINGREQ:心跳;
- PINGRESP:确认心跳;
- DISCONNECT:客户端终止连接前优雅地通知MQTT代理;
二、入门使用
这里使用了EMQ(杭州映云科技有限公司)
的专业版试用产品作为学习,感谢老铁送来的火箭。

首先新增一个认证账号,总不能随都可以随便接入吧。

接下来就进行Demo开发
1 MQTT客户端Java代码
先来看看官方的Demo,首先通过Web的调试工具插入消息。

然后新加入Java代码
package com.ljm.mqtt;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class MqttSample {
public static void main(String[] args) {
String topic = "test/topic";
String content = "Hello World";
int qos = 2;
String broker = "tcp://IP地址:1883";
String clientId = MqttClient.generateClientId();
// 持久化
MemoryPersistence persistence = new MemoryPersistence();
// MQTT 连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
// 设置认证信息
connOpts.setUserName("lijiamin");
connOpts.setPassword("passwd".toCharArray());
try {
MqttClient client = new MqttClient(broker, clientId, persistence);
// 设置回调
client.setCallback(new SampleCallback());
// 建立连接
System.out.println("Connecting to broker: " + broker);
client.connect(connOpts);
System.out.println("Connected to broker: " + broker);
// 订阅 topic
client.subscribe(topic, qos);
System.out.println("Subscribed to topic: " + topic);
// 发布消息
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
client.