MQTT协议是运行在TCP协议栈上的应用层协议,虽然MQTT协议的名称有Message和Queue两个词,但是它并不是像RabbitMQ那样的消息队列,这是初学者最容易搞混的一个问题。MQTT协议与传统的消息队列相比,有以下几个区别。
1)传统消息队列在发送消息前必须先创建相应的队列。在MQTT协议中,不需要预先创建要发布的主题(可订阅的Topic)。
2)传统消息队列中,未被消费的消息会被保存在某个队列中,直到有一个消费者将其消费。在MQTT协议中,如果发布一个没有被任何客户端订阅的消息,这个消息将被直接扔掉。
3)传统消息队列中,一个消息只能被一个客户端获取。在MQTT协议中,一个消息可以被多个订阅者获取,MQTT协议也不支持指定消息被单一的客户端获取。
MQTT协议有几个不同的版本,目前支持和使用最广泛的版本是3.1.1。2017年8月,OASIS MQTT Technical Committee正式发布了用于Public Review的MQTT 5.0草案。2018年,MQTT 5.0正式发布。
MQTT 5.0在MQTT 3.1.1的基础上做了很多改变,并不向下兼容。本书以MQTT 3.1.1标准为主,同时也会讲到MQTT 5.0的新特性。