V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xmge
V2EX  ›  程序员

emqx 学习之灵魂三问。v 站大神求围观....

  •  
  •   xmge · 2020-03-30 18:49:35 +08:00 · 1497 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中有用到 emqx 服务器,但是并不是集群的,对于集群的原理不太了解,最近在学习,但是搜索网上文档,并没有能解决我以下的三个疑问,于是乎,想起了 v 站,也许只有这里可以解决吧。感谢大佬。

    emqx 官网文档:https://docs.emqx.io/broker/latest/cn/

    1 、golang 程序通过第三方包连接一个 emqx 集群,其中连接了 host1,host2,host3 三个节点。这个第三方包是全都连接了这三个节点呢?还是随便其中一个节点,还是只连接主节点(如果只连接主节点,它如何知道哪个是主节点的)。 2 、现在我用它订阅了一个主题 A (之前这个主题并不存在),那这个主题是保存在哪个节点上呢?我的 session 保存在哪个节点上呢? 3 、我现在同样的另一个程序连接了这三个节点,并订阅了主题 A,他是如何收到信息的。

    Eds1995
        1
    Eds1995  
       2020-03-30 20:15:49 +08:00 via Android
    1 emqx 集群后,可以随便连接那个节点都可以,emqx 的节点没有主从区分
    2 主题在订阅的时候创建,然后会全局复制一个主题和节点的路由,session 是保存在登录的节点内存中
    3 客户端只需要连接一个节点,消息会在集群中自动路由
    如果关心路由,可以查看我们的路由架构图 https://docs.emqx.io/broker/latest/cn/design/design.html
    xmge
        2
    xmge  
    OP
       2020-03-30 20:25:42 +08:00
    @Eds1995
    大佬,这个我看过,有些地方还是不是很明白,
    比如 node1 上有主题 A,node2 上有主题 B,程序 1 连接的是 node1,程序 2 连接 node1 并订阅主题 B 。

    程序 1 向 B topic 上发送消息,执行过程是 发送到 node1,然后 node1 再通过路由转发到 node2 上吗?

    程序 2 接受消息的过程是:消息 node2 通过查表,发现 node1 上的程序 2 订阅着 B topic,然后就把消息再推送给 node1?
    Eds1995
        3
    Eds1995  
       2020-03-30 21:52:35 +08:00 via Android
    @xmge 是这样的,分布层通过匹配主题树 (Topic Trie) 和查找路由表 (Route Table),在集群的节点间转发路由 MQTT 消息:
    xmge
        4
    xmge  
    OP
       2020-03-31 09:21:37 +08:00
    @Eds1995 非常感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:27 · PVG 11:27 · LAX 19:27 · JFK 22:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.