项目中有用到 emqx 服务器,但是并不是集群的,对于集群的原理不太了解,最近在学习,但是搜索网上文档,并没有能解决我以下的三个疑问,于是乎,想起了 v 站,也许只有这里可以解决吧。感谢大佬。
emqx 官网文档:https://docs.emqx.io/broker/latest/cn/
1 、golang 程序通过第三方包连接一个 emqx 集群,其中连接了 host1,host2,host3 三个节点。这个第三方包是全都连接了这三个节点呢?还是随便其中一个节点,还是只连接主节点(如果只连接主节点,它如何知道哪个是主节点的)。 2 、现在我用它订阅了一个主题 A (之前这个主题并不存在),那这个主题是保存在哪个节点上呢?我的 session 保存在哪个节点上呢? 3 、我现在同样的另一个程序连接了这三个节点,并订阅了主题 A,他是如何收到信息的。
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 |
2
xmge OP @Eds1995
大佬,这个我看过,有些地方还是不是很明白, 比如 node1 上有主题 A,node2 上有主题 B,程序 1 连接的是 node1,程序 2 连接 node1 并订阅主题 B 。 程序 1 向 B topic 上发送消息,执行过程是 发送到 node1,然后 node1 再通过路由转发到 node2 上吗? 程序 2 接受消息的过程是:消息 node2 通过查表,发现 node1 上的程序 2 订阅着 B topic,然后就把消息再推送给 node1? |