MQTT学习

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skye111321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值