MQTT Broker mosquitto

MQTT

全称

MQ Telemetry Transport 消息队列遥测传输协议
IBM 1994开发
MQTT v3.1.1 第4版 OASIS标准
1 to 0/1/Nhtml

简介

MQTT是一个TCP服务端,称为broker。
经过这个broker服务,咱们能够做为发布者,发送一条主题消息给broker,而后其余订阅者经过消息订阅机制得到broker的主题消息推送。咱们也能够做为订阅者,订阅其余发布者的主题消息。web

对比MQ

消息队列存储消息,直到它们被消耗
消息队列中只有一个消费者处理消息,MQTT中订阅主题的每一个订阅者都会收到消息
消息队列要提早并明确建立,MQTT中能够随时实时建立redis

议题

  • 自动重连 Automatic Reconnect
  • 离线缓存 Offline Buffering
  • 消息持久化 Message Persistence
  • 高可用 High Availability
  • 安全 SSL/TLS
  • websocket支持

链接

创建

broker开启一个host的TCP 1883端口
客户端链接Broker
若是是重连,须要带上上次ClientID
若是不是重连,能够指定CleanSession是否清空以前会话
能够指定两端之间心跳维持时间
服务端根据参数,重用或开启会话Session,绑定ClientID
一个会话,能够服务多个TCP链接,取决因而否CleanSession缓存

会话

PersistentSession与CleanSession
session相关信息将会同时保存在broker和client中,session里包含如下内容:
客户端的订阅信息
从broker接收来的尚未ack的消息
发送给client的尚未ack的消息安全

断开

客户端主动断开:客户端发送 DISCONNECT 关闭连接,遗嘱失效并删除
客户端异常断开:遗嘱消息发布服务器

消息

消息类型

心跳消息
链接、断开链接消息 10 e0
订阅、取消订阅消息 80
发布消息 30websocket

遗嘱消息

为了能知道哪一个客户端异常断开,broker定时查询客户端状态。
当检查到客户端异常断开时,就发布客户端链接时指定的遗嘱消息到指定主题。
正常断开,是不会有遗嘱消息发布的。session

保留消息

发布者发布主题消息时,能够指定消息是否缓存到broker,做为对应主题的最后一次消息记录
订阅者链接后,可一次性获取想要的主题的所有保留消息socket

主题

分层过滤格式

树状结构,用'/'分隔,如:home/light/brightness
通配符:code

  • 单层通配符 如,a/b/+” 匹配 “a/b/c1” 和 “a/b/c2”,可是不匹配 “a/b/c/d”
    # 多层通配符 如 “a/b/c/#" 能够匹配 “a/b/c”、“a/b/c/d” 和 “a/b/c/d/e”

特殊的主题$SYS

查看服务器的状态信息

消息分发可靠性QoS

  • 至多一次 容许丢失,无需回复订阅者回复,发布者自动删除。适用传感器数据
  • 至少一次 确保到达,须要订阅者回复,发布者和broker都缓存消息,待订阅者回复后,再依次删除消息缓存。可能重复发送
  • 只有一次 确保到达,不重复不丢失,用的不多
    图示

消息发布与订阅

基于主题的消息过滤,可使用通配符来订阅多个主题的消息
发布消息时,不可使用通配符,必须指定完整的topic名
若是想发送给多个topic,须要发布屡次
发布者在每次发布消息时都须要设置QoS

消息存储

可使用基于内存的,可是单点故障状况下,消息会丢失。
能够结合外部redis,进行消息外部存储。

redis消息持久化配置

storage_class io.moquette.persistence.redis.RedisStorageService 

# redis storage
redis.host localhost
redis.port 6379
redis.password
redis.database 0
redis.prefix monitor:
相关文章
相关标签/搜索