赞
踩
EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。支持亿级的MQTT服务订阅。是目前相对性能较好的MQTT Broker,提供三种服务:1.云服务版本;2.商业版;3.开源版。
EMQX 分布式的基本功能是将消息转发和投递给各节点上的订阅者,同一个主题的订阅者可能会绑定到不同节点,实现以上功能则在集群中维护了几个与之相关的数据结构:订阅表,路由表,主题树。
node1:
topic1 -> client1, client2
topic2 -> client3
node2:
topic1 -> client4
topic1 -> node1, node2
topic2 -> node3
topic3 -> node2, node4
t/+/x -> node1, node3
t/+/y -> node1
t/# -> node2
t/a -> node3
当 MQTT 客户端发布消息时,所在节点会根据消息主题,检索路由表并转发消息到相关节点,再由相关节点检索本地的订阅表并将消息发送给相关订阅者。
例如 client1 向主题 t/a 发布消息,消息在节点间的路由与派发流程:
client1 发布主题为 t/a 的消息到节点 node1
node1 通过查询主题树,得知 t/a 可匹配到现有的 t/a、t/# 这两个主题。
node1 通过查询路由表,得知主题 t/a 只在 node3 上有订阅者,而主题 t/# 只在 node2 上有订阅者。故 node1 将消息转发给 node2 和 node3。
node2 收到转发来的 t/a 消息后,查询本地订阅表,获取本节点上订阅了 t/# 的订阅者,并把消息投递给他们。
node3 收到转发来的 t/a 消息后,查询本地订阅表,获取本节点上订阅了 t/a 的订阅者,并把消息投递给他们。
消息转发和投递结束。
EMQX 的订阅表在集群中是分片(partitioned)的,而主题树和路由表是共享(replicated)的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。