EMQX5.0集群路由与数据同步疑问

5.0基于mria的方案是网+星,那coreA节点下的rep1节点的消息,到coreB节点下rep2的消息的路由是怎样的?
我理解应该不是rep1–coreA–coreB–rep2这样的路径;如果不是这样那我理解是不是不同broker之间的路由拓扑和数据拓扑是独立的,或者说分层的,路由拓扑是网状的,数据拓扑是网+星的?
不知道我的理解是否有问题,望解答。

Pub/Sub 的路由过程可以简化为,假设 现在有 core1, repl1 repl3 三个节点的集群:

订阅/取消过程:

  1. sub1 链接到 repl1 并发起一个订阅
  2. repl1 接收到该订阅后:
    2.1. repl1 将写路由表的请求,转交给所链接的 core 节点,进行写 (即 core1)并同步等待写成功
    2.2 core1 收到写请求后,将在所有 core 节点中,执行写事务,
    2.3 全部core节点路由写成功后,开始异步复制到所有的 repl 节点,并同时返回写成功
    2.4 sub 在repl1 订阅成功
    2.5 repl1 和 repl2 收到异步的复制数据,并写入把路由写入本地路由表
  3. 订阅成功后,repl1 本地写入订阅表

发布过程

  1. pub1 链接到 repl2 并发起一个 PUBLISH
  2. repl2 查询本地路由表,并返回存在该订阅关系的节点列表
  3. repl2 将消息分发给列表中的所有节点
  4. repl1 收到消息后,查询本地订阅表 ,并返回订阅客户端列表
  5. repl1 将消息分发给所有的订阅客户端。

其中:路由表保存是主题和节点的映射;订阅表保存是是主题和订阅改主题的客户端列表的映射

那coreA节点下的rep1节点的消息,到coreB节点下rep2的消息的路由是怎样的?

所以,结论是 repl1 上的消息,会根据路由表 会直接投递对应的 repl 节点。