MQTT3.1.1协议解析

协议产生背景

MQTT (Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于TCP/IP网络协议栈的应用层协议。MQTT最开始是1999年IBM公司用于通过卫星通信连接石油管道监测系统而创造的协议。
这种场景的特点是:

阅读更多

百度开源MqttBroker:BifroMQ分析

2023.07.17收到了百度开源IoT Broker的好消息,一直没有时间看。最近工作闲下来了,准备分析一下它的实现。

2019年开发Broker时,调研了很多实现方式,百度IoT是我特别想参考的实现,只可惜当时并没有开源代码可以参考,通过对实现方式的猜测,总结了这篇文章:《百度IoT:MQTT Broker架构设计》,不过现在开源版本改动了很多东西。

我们以BifroMQ v1.0.2版本来分析。

阅读更多

好用的MqttBroker:JMQTT2.1.0源码分析

JMQTT是cicizz在2019年开始开源的项目,当时我们公司刚好在做IoT的东西,需要一个Java语言的MQTT Broker,但是当时物联网刚刚兴起,别说Java写的了,就是其他语言写的,也就只有emqtt(现改名EMQX)算是能用的,其他的如古早的mosquitto都是玩具项目。所以JMQTT1.x是很厉害的,也是我参考了很多的项目。

我参与了JMQTT初期的一些开发,不过现在JMQTT已经发展到3.x版本了,被改了很多东西,如为了支持MQTT5增加了hivemq-client,为了优化集群增加了akka,然后增加了一些UI界面等,还有一些老代码的兼容。个人认为新版的代码已经很乱了,比如MQTT3是用Netty直接写的,MQTT5又用hivemq间接地用Netty,这种就很难管理。

阅读更多

入门级MqttBroker:MqttWk1.3.0源码分析

MqttWk可以算作开源MQTT Broker中的教科书,代码简洁易懂,虽然并不适合生产,但对照着MQTT白皮书的每个功能,都能在里面找到基本的实现,能够对Broker有个非常全面的认知以及有了兜底方案的底气(实在写不出,按这个思路先上生产也行,能用就行)。

作者wizzer其实是为了推广他写的Nutz,把MqttWk当作Nutz的一个应用场景来写的。Nutz/NutzBoot就是国产版Spring/Springboot,作者除了实现IoC、AOP等基本功能,还做了一些国内公司喜欢的小优化。在MqttWk中大量出现Nutz的代码,不过不必担心,只要会Spring就能够瞬间理解,只是换了个参数名字而已。

阅读更多

Moquette源码分析(二)v0.12订阅树

Moquette 0.12(以下简称M12)的订阅树实现在moquette-0.12/broker/src/main/java/io/moquette/broker/subscriptions,包括:

订阅树版本 M10 M12
订阅树增删改查 SubscriptionDirectory CTrieSubscriptionDirectory
订阅树 - CTrie
片段 Token Token
主题 Topic Topic
订阅信息 Subscription Subscription
普通节点 TreeNode CNode
封装节点 - INode
墓碑节点 - TNode

查看源码的时候应该从CTrie开始阅读。

阅读更多

Moquette源码分析(一)v0.10订阅树

一、M10 简介

Moquette 0.10(以下简称M10)的订阅树实现在moquette-0.10/broker/src/main/java/io/moquette/spi/impl/subscriptions,包括:

  • SubscriptionsDirectory:订阅树的增删改查
  • Token:片段,由topicFilter按“/”分割而成的最小字符串单位
  • Topic:主题/主题过滤器,包含一系列方法,比如比较主题和主题过滤器是否匹配
  • Subscription:订阅信息,{clientId, topicFilter,qos,active}
  • TreeNode:树节点

查看源码的时候应该从SubscriptionsDirectory开始阅读。

阅读更多

百度IoT:MQTT_Broker架构设计

百度IoT的Broker设计我特别想参考的但是技术能力和时间不够去实现……网上只有一篇百度工程师的总结《共享行业的分布式MQTT设计》,这里将围绕这篇文章去讲解。

Broker集群架构

单机版MQTT Broker有连接数量和并发处理能力的限制,因此分布式必不可少。百度IoT采用的Akka Cluster来做集群管理,每个节点对等,不存在像Mosquitto这种用一台机器“桥接”做分布式产生的单点故障隐患。每个节点监听MemberUp、MemberDown、MemberUnreachable、ClusterMemberState等事件来感知其他节点的上下线,用Akka Actor实现节点间的消息通信。

baidu_broker_cluster.jpg

阅读更多