MQTT
Message Queue Telemetry Transport(消息队列遥测传输协议),它由IBM于1999年发布,构建于TCP/IP协议之上,是一种基于publish/subscribe的轻量级协议。它可以使用极有限的带宽,为远程设备的连接提供可靠有效的实时消息服务,尤其适用于网络延迟、带宽低等受限环境的分发,是IoT最常用的一种标准协议。
特点
MQTT使用的publish/subscribe的模式,是一对多的消息分发机制,从而解除了应用程序之间的耦合。它的消息是依赖于TCP/IP网络的,所以有可能出现消息丢失的情况,MQTT提供了三种消息发布服务质量(QoS)
- 至多一次:消息只发送一次,订阅方是否收到不重要;适用于非关键数据连续发布推送场景,例如空气质量、室内温度等传感数据。
- 至少一次:消息至少发送一次,有可能出现重复发送;适用于预警告警场景使用,确保场景安全。
- 只有一次:确保消息到达且只有一次;适用于计收费场景。
运行机制
MQTT中有三种角色,即发布者,订阅者,代理服务器
- 发布者:分发消息的服务器
- 订阅者:接收消息的服务器
- 代理服务器:接收发布者发出的消息,并将消息发送给所有订阅者
MQTT消息的主题分为两部分:即 Topic 和 payload
- Topic:消息的类型,只有订阅该Topic的订阅者才能收到此消息
- Payload:消息体的具体内容
云产品
我们公司也提供了基于mqtt的云产品,指路云产品——分布式消息服务MQTT。
AMQP
Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,它是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件、开发语言等条件的限制,例如,RabbitMQ就是使用Erlang语言实现的。
AMQP中的角色
- 生产者:发布消息
- 交换机:接受生产者的消息,并将消息放到队列中
- 四种交换机:直连,扇形,头,主题
- 两个状态:暂存,持久
- 队列:交换机将收到的消息根据路由规则绑定到队列中
- 属性:
- 消费者:AMQP代理将消息发送给订阅消息的消费者;消费者按需取用
发布者,交换机、队列和消费者都可以存在多个,且同样的角色可以分布在不同的物理设备上。
从安全角度来讲,网络是不可靠的,消息发送出去后又可能出现丢失或者消费异常,为了解决这种问题,AMQP提供了一种消息确认机制,当消息从队列中发送给消费者之后不会立即被删除,直到收到来自消费者的确认回复后才会从队列中移除消息。
其他应用层协议还有Rest/HTTP,FTP,XMPP等,本文中不再做详细赘述。