emq4.2.9消息桥接到低版本2.3.11的问题

环境信息

  • EMQ X 版本:旧版 Erlang MQTT Broke 2.3.11 新版本:EMQ X Broker 4.2.9
  • 操作系统及版本:CentOS Linux release 7.6.1810 (Core)
  • 其他:

问题描述

4.2.9的消息能桥接到旧版的2.3.11上面,我使用以下命令桥接:
1、emqx_ctl plugins load emqx_bridge_mqtt
2、emqx_ctl bridges start aws
当我成功配置了桥接后,我用mqtt客户端连接4.2.9的服务器ip 1883端口发现连不上,账户名和密码都配置的是正确的,这个能帮忙分析下是什么原因吗?

配置文件及日志

先检查下ip地址和端口,看看4.2.9的broker是否正常运行,最后查看连接时的emqx日志

都看过了,没有问题,而且我重新部署还是一样的情况。不知道哪里的问题

抓下tcp先确定连接是否真的到达了emqx
然后如果连接真的到达了emqx这边,不可能出现拒绝连接,但没有任何日志或者提示的情况

图片

图片

包都到达了服务端了,也发送了tcp的三次握手,但是我看了被拒绝的那个抓包,发现服务端没有发送Connect ACK的指令,直接发了FIN断开了

服务器主动断开了连接
1.看看这个端口的使用者是不是emqx
2.如果是emqx主动断开的,理论上会有日志输出
3.确定下关闭桥接后,是否正常

查看了1883端口是emqx启动的,
1、我关掉桥接发现还是连接不成功
2、我直接mv emqx emax.bak 重新unzip emqx-centos7-4.2.9-x86_64.zip 这个包后,重新部署发现还是提示连接lost,我是在阿里云服务器上部署的,现在正在重装系统,等系统重装后再重新部署试试
各种方法都试过了不行,日志已配置为debug,发现没有打印相关连接的日志

listener.tcp.external.proxy_protocol = on
listener.tcp.external.proxy_protocol_timeout = 3s
这2个配置注释掉可以正常连接,这2个配置开启连接会失败

这2个配置我开启是为了获取经过nginx代理后获取真实的客户端ip,开启后只能正常接收到nginx或者haproxy的流量么?
但是我直连开启了proxy protocol的真实emq服务器就报错了,这个官方文档里面怎么不说明一下?我想其他人肯定也遇到了这个问题。

默认的是关闭的,我记的。你没用nginx或者haproxy负载咋也开了。

我是用了nginx做tcp代理,最前端用的阿里云SLB,后面我测试桥接的时候,突然就不能直连开了代理协议的emq服务器,我记得没有启用桥接之前也是开启了proxy protocol可以直接连的,现在开启proxy协议的情况下再直连emq服务器的1883端口就不行了,只能连接代理的地址才可以

我感觉是不会有影响的,除非你连接的时候也发了一包数据,而这包数据和代理发送原始ip的数据包相似,而使emqx误认为是捕获到代理发送原始ip的数据包但解析不出来。

你可以测试一下,我这边现在都是这个情况

您好,通过不建议跨越这么多版本进行桥接,虽然理论上使用的都是 MQTT 标准协议,但在版本迭代中可能对协议的解析、处理,甚至是桥接功能都进行修复或者调整,所以最好还是使用相近的版本进行桥接。

好的