MQTT的使用

        MQTT是一款基于topic消息发布、订阅的产品,普遍应用于物联网当中,有三个角色,发布者、broker、订阅者,消息由发布者发到broker中,然后由broker将消息推送到订阅者;

MQTT特点:

   1、轻量级:体现在消息体小,对header做了简化

         消息分为固定头、可变头、消息体,在后面会单独说明;

   2、提供了qos,保证不同场景的消息传递质量

          0:消息只发一次,不管订阅者是否收到,类似rocketMQ的广播消息;

          1:消息发到broker后等到broker返回接收成功,如果没有收到broker的返回 则间隔一段时间再次发送,订阅者可能会收到多次,重复消费,类似rocketMQ的同步消息;

           2:订阅者只成功消费一次,适合对业务数据要求比较高的场景,例如 转账;

           qos的降级:如果生产者和发布者的qos不一样,则订阅者以两者中最小的qos为准;

            qos=0消息流程最简单所以吞吐量越高;

          qos=1等到对方确认收到消息后才算成功,如果没有收到对方确认消息会多次发送;

        qos=2 生产者发mes给broker,broker收到消息后返回PUBREC,然后生产者发PUBREL消息,broker收到消息后返回PUBCOMP;

             1、如果生成者没有收到PUBREC而多次发了msg,broker以收到PUBREL消息为准将之前的重复msg丢弃、只保留一条;

             2、如果生产者没有收到PUMCOMP而发了多条PUBREL,broker中会根据消息id判断是否重复,如果有重复就丢弃;这样就保证了在broker中只存在一条有效数据;

             broker发消息给订阅者 和 生产者发消息给broker的流程是一样的;

            3、topic:使用多层级的方式

                  在订阅者中topic可以使用通配符,通配符有两个:+ 和 #

                  生产者中不能使用通配符,必须是明确定义的topic,如  /a/b/c

                  在订阅者中可以使用   /a/+/c、/a/b/+、/a/*   等通配符方式类订阅 /a/b/c 的消息;、

                  这样就实现了一个订阅者可以订阅大量生产者的消息;

MQTT协议中的方法,也就是消息类型:

1 CONNECT :客户端连接到服务器
2 CONNACK :连接确认
3 PUBLISH :发布消息
4 PUBACK :发布确认
5 PUBREC :发布的消息已接收
6 PUBREL :发布的消息已释放
7 PUBCOMP :发布完成
8 SUBSCRIBE :订阅请求
9 SUBACK :订阅确认
10 UNSUBSCRIBE :取消订阅
11 UNSUBACK :取消订阅确认
12 PINGREQ :客户端发送心跳
13 PINGRESP :服务端心跳响应
14 DISCONNECT :断开连接
15 AUTH :认证
消息的组成:
       1、固定头

           分两部分,第一部分一个字节(8位字符)是固定的,前面四位表示消息的类型(上面的15种方法),从 0000到1111,后面四位表示消息的qos、是否重复 消息等;

            前四位:

           后四位:

          第二部分表示表示消息的大小,根据消息体的大小 这一部分固定头的长度也不固定,范围是0-4个字节,每个字节都是 0或1 组成的8位字符,其中最高位表示是否超出了这个长度;

               如一个消息体很小,一个字节的范围内(128位字符)就可以表示,则第8位为0,这一部分的长度就是1个字节,如果超出了128位字符第一个字节就不够了,此时第一个字节的第8为就是1,需要用到第二个字节,此时这一部分长度为2个字节;最极端的情况是4个字节全部是1,此时表示的最大长度是256M,所以MQTT的单个消息不能超过256M;

            固定头是每个消息都有的,但是长度是不固定的,范围是 2-5个字节;

        2、可变头:

              可变头存储的是消息相关的属性,如协议名、协议版本号(客户端MQTT版本号)、心跳时长(链接请求)、主题名、消息ID 等,有效消息类型是没有可变头的,而且不同的消息类型可变头中的内容也不一样;

        3、消息体

              消息体就是实际发送的数据,有些报文类型是没有消息体的;

              PUBLISH消息体就是指消息内容,CONNECT的消息体则包含Client IdentifierUsernamePassword等信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值