Mosquitto之MQTT几个重要名词

MQTT是一个轻量级的发布/订阅消息协议,它非常适合于低功耗的传感器等设备;当然,其他很多业务场景也很适合。本文仅介绍MQTT中的几个比较重要的概念。有关MQTT协议等更加详细的内容请参考:

http://mqtt.org/
  • Publish/Subscribe(发布/订阅)

 MQTT协议是基于发布消息和订阅主题的原理,简称“pub/sub”。多个客户端连接broker并订阅各自感兴趣的主题(topic),而其他的一些客户端连接broker并在相关的主题上发布各种消息。Broker和MQTT看起来就像一个具备共同属性的抽象接口,它允许任何事物进行接入。

  • Topics/Subscription(主题与订阅)

MQTT的消息是发布在主题上的。消息发送者只需要在该主题上进行消息的发布,而不需要对主题进行额外的配置或者初始化操作。主题它是一个具备层次结构的字符串,它使用“/”作为层次的分隔符,类似于文件系统。

消息接收者可以通过创建一个订阅来获取MQTT的消息。一个订阅需要显式地指定一个主题,一旦有客户在该主题上发布消息,接收者就可以获取到该消息。

客户端订阅一个主题时,主题可以使用一些通配符,目前支持的通配符有两个:

+: 匹配单个层次,可以为0个。类似目录当中某级的名称。例如:sensor/+/temperature/+;

#: 匹配多个层次,可以为0个。在它后面不应该再出现任何的层次。例如:a/#,或者#;

注意:零长度的层次的主题在匹配通配符时可能有些不明显的意义。例如:a//topic的主题可以被客户端以a/+/topic的模式匹配到。类似地,零长度的层次可以在主题的头部和尾部,匹配策略类似。

  • Quality of Service(服务质量/Qos)

MQTT定义了三个级别的服务质量,它要求broker/client如何保证一个消息被收到。

Qos = 0:broker/client将会投递一次消息,没有任何的确认保证。因此可能出现消息的丢失现象。

Qos = 1:broker/client将至少投递一次消息,具备确认保证机制,但是它不保证消息是否重复投递。

Qos = 2:broker/client将只会投递一次消息,并且通过4次握手过程保证该消息确保被收到。

消息发布方可以以任何的Qos值进行消息发布,同时消息的订阅方也可以以任意的Qos值进行订阅接收。Broker会根据订阅方的Qos值,选择合适的Qos进行消息投递。例如:发布方以Qos=2对消息进行发布,但是订阅方以Qos=0的方式进行接收,那么broker在消息投递时,其发出的消息将是按照Qos=0的方式投递给订阅方。如果此时又有另外一个订阅方同样订阅该主题,并且它的Qos=2,那么Broker将会以Qos=2的方式将该消息投递给该用户。但是,如果消息以Qos=0的方式发布,而订阅方以Qos=2的方式进行订阅,则此时订阅方收到的消息的Qos值将会是0。

  • Retain Message(保留消息)

任何客户端发布的消息都可以设置为保留消息,broker在收到带有保留标志的消息时,它除了会将该消息发送给所有的订阅者之外,同时它还会在内存中保留一份。如果存在新的订阅者来订阅该主题时,broker会先将该保留消息发送给该订阅者。

保留消息一般用于数据变化比较缓慢的应用场景,例如某些开关量等。一旦数据发生变化,消息发布方将数据以保留消息发布,broker将长时间保存该值直到新的值来到,同时新的订阅方可以实时地获取到该数据的当前值。

  • Clean Session/Durable Connection

对任何一个订阅者,它可以在发起connect的时候指示当前的会话是否是一个clean session。如果不是,那么可以认为这是一个Durable Connection,broker会为该会话保存相应的记录。此后,该会话断开了,而消息发布者在后续的时间往该主题发送了一些Qos大于0的消息,在该订阅者再次连接到broker的时候,broker根据之前记录的信息,并将那些后续收到Qos大于0的消息投递给该订阅者,这样消息订阅者在异常之后还能收到之前的数据,从而保证了消息的不丢失;

如果该会话是一个clean session,那么断开之后的那些消息broker将不再投递,会话也就丢失了这些消息。

注:Durable Connection只对Qos大于0的消息有效。

  • Will(遗嘱)

当一个客户端连接到broker时,它可以告知broker它有遗嘱。这个遗嘱包括遗嘱topic、遗嘱消息体等。遗嘱指示在订阅者一旦断开的时候,broker将该遗嘱消息发送到指定的遗嘱topic上。遗嘱消息类似于普通消息,它具备qos、retain标志等信息。

遗嘱机制可以用于报警等相关应用场景。

 

 

注:本文来自https://mosquitto.org/man/mqtt-7.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值