EMQ的使用

EMQ的使用

Posted by CDz on May 4, 2020

1. EMQ的使用

1.1. 如何搭建集群?

下载软件包,在不同的机器上。

修改文件\etc\emqx.conf 的node.name = emqx@192.168.1.47,后面跟的一定要是本机域名,一定要相同如果不同会导致join出错。

client端clientid参数是关键,本地不同的clientid会导致新的链接

实现离线消息:

但是有最大队列数量,不多1000。

// MQTT的连接设置 options = new MqttConnectOptions(); // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接 options.setCleanSession(false);

1.2. EMQ集群是如何工作的?

相互互联 EMQ集群是相互互联的。因为长连接是有状态的(也就是说长连接是有状态的),所以需要找到对应推送的长连接才行。

共享订阅与发布信息 mqtt协议是基于发布订阅模式实现长连接的 推拉消息的。

如何共享订阅与发布信息? 假设有mqtt服务器4台(m1,m2,m3,m4)

  1. 所有节点都有相同的(所有订阅节点的总和)一份订阅树
  2. 所有订阅树上绑定着对应的节点(哪些订阅是属于哪些节点的),
  3. 由接受到的消息的服务器进行转发

具体发布订阅流程:

  1. 订阅消息
    1. client1订阅topic/client1,client1所在节点订阅成功后,广播给其他server(m2,m3,m4)
    2. 所以集群中不仅有订阅树,还有一个订阅URL与节点的路由表
  2. 发布消息
    1. 在找到与之匹配的topic,并且根据路由表找到对应的server,并广播
1.3. EMQ集群测试
  1. 集群两节点自动断开会自动断开
    1. 当两边任意一个断网时,集群会断开链接
  2. client端会自动断开
    1. 客户端可以通过编码的方式,维护一个长连接不断线

2. EMQ桥接模式与集群模式的区别

桥接模式:顾名思义 连接两个MQTT broker。

并且是定向的。

只能从一方->另一方

需要配置好。

疑问:

  1. 那么如果发送的一方挂掉了,那么不就桥接模式就断掉了吗?
  2. 如果多个桥接会不会有问题,比如说两个集群A,B。A中多个broker桥接到B集群中不同(或者相同的)的broker上会不会出现消息重发的现象

3. EMQ高级使用

在官方文档中有一个规则的使用,当时我一直不知道这个有什么用处。

直到后来思考IM业务的时候,才发现这个规则有巨大的用处。简单说这个规则就是定义一个特定的规则,当某个topic有消息传输时,接下来可以自定义动作要做的事情,仔细想想所有业务也逃不过这些操作,要么是操作数据库,要么是操作一段业务,而业务的话可以使用HTTP,如果是发送其他信息,可以直接配置。

这样想象空间就大很多。

4. 小问题

  • 集群情况下如何监控每个节点与集群的健康关系
  • 集群配置,每台设备都是一样,但是好像需要单独配置
    • 数据库存储
    • 消息业务操作钩子