MQTT一种物联网数据传输协议,构建在TCP之上,采用发布与订阅的模式进行数据交互,发布与订阅是两个独立的连接通道
协议格式
MQTT协议控制报文的格式包含以下三个部分:固定报头,可变报头和有效载荷
固定报头

第一个字节的二进制位7-4无符号整数表示控制报文的类型,具体类型对应的值为

第一个字节的二进制位3-0包含每个MQTT控制报文类型特定的标志, 控制报文中的标志为必须按照如下表格进行设置,如果设置有问题,则接收者必须断开连接

第二个字节表示当前报文剩余部分的字节数,包括可变报头和有效载荷。
可变报头
可变报头介于固定报头和有效载荷中间。不同的控制报文有着不同的可变报头,其中PacketId是一个在多个控制报文中存在一个报文。
PacketId包含两个字节,现在包含该字段的控制报文有,PUBLISH(Qos>0), PUBACK, PUBREC, PUBREL,PUBCOMP,SUBSCRIBE,SUBACK, UNSUBSCRIBE, UNSUBACK。
有效载荷
有效载荷即为应用消息。
实现方式
MQTT系统由与服务器通信的客户端组成,通常称服务器为“代理Broker”。客户可以是信息发布者Publish或订阅者Subscribe。每个客户端都可以连接到代理。
信息按主题层次结构组织。当发布者具有要分发的新数据时,它会将包含数据的控制消息发送到连接的代理。然后,代理将信息分发给已订阅该主题的任何客户端。发布者不需要有关于订阅者数量或位置的任何数据,而订阅者又不必配置有关发布者的任何数据。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分: (1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload); (2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
消息服务质量
Qos=0
至多发一次
Qos=1
至少发一次
Qos=2
刚好发一次
在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
JAVA实现
消息broker
EMQ,mosquitto等,我用的是ActiveMQ
发布
1.定义URI
2.定义自身的client id
3.用户名密码
4.New一个MqttClient
传入URI和自身id以及内存存储client id
5.连接服务器
New一个MqttConnectOptions,设置用户名密码等信息
6.客户端回调
7.设置topic(可能是多个topic)
8.发布
订阅
1.定义URI
2.定义自身的client id
3.用户名密码
4.New一个MqttClient
传入URI和自身id以及内存存储client id
5.连接服务器
New一个MqttConnectOptions,设置用户名密码等信息
6.订阅消息
设置Qos和topic
1993

被折叠的 条评论
为什么被折叠?



