使用EMQX的规则引擎转发webhook,后台部分连接转发不成功

环境信息

  • EMQX 版本:开源版本4.2.5
  • 操作系统及版本:CentOS Linux release 7.9.2009 (Core)
  • 其他

问题描述

使用EMQX的规则引擎转发webhook,同时上线1000台模拟设备,只有900台左右转发到后台

配置文件及日志

2022-08-30 14:56:17.570 [error] <<“client_RqkNuslJDjnUCUsq”>>@xx.xx0.2xx.xx:10053 [WebHook Action] HTTP request error: {closed,“The connection was lost.”}
2022-08-30 14:57:17.713 [error] <<“client_wvLbv6snqNY4Xdkt”>>@xx.xx0.2xx.xx:2598 [WebHook Action] HTTP request error: {closed,“The connection was lost.”}

The connection was lost 错误看起来是你的 HTTP 服务和 EMQX 之间的 HTTP 连接断开了,这个 http 服务本身能支持多少的 TPS ?

这个问题已经排查出来,但是还有另一个问题出现了。
设备会频繁的上线下线,会报出这种日志:
2022-08-31 05:41:36.125 [warning] <<“client_WL1261000000692”>>@xxx.xxx.xx.xxx:44876 [Channel] The PUBACK PacketId 1 is not found.

2022-08-31 10:02:22.916 [error] <<“client_868618056571268”>>@xxx.1xx.1xx.xx:46576 [CM] Failed to discard <42268.18990.3906>: {‘EXIT’,{{shutdown,tcp_closed},{gen_server,call,[<42268.18990.3906>,discard,infinity]}}}
2022-08-31 10:05:29.225 [error] supervisor: ‘esockd_connection_sup - <0.1877.0>’
errorContext: connection_shutdown
reason: {ssl_error,
{tls_alert,
{handshake_failure,
“TLS server: In state certify at ssl_connection.erl:981 generated SERVER ALERT: Fatal - Handshake Failure\n no_client_certificate_provided”}}}
offender: [{pid,<0.29702.283>},
{name,connection},
{mfargs,
{emqx_connection,start_link,
[[{deflate_options,[]},
{max_conn_rate,500},
{active_n,100},
{zone,external}]]}}]

第一个 warning 日志没关系的
第二个 这是一个race-condition 导致的 bug,这个日志是说同名clientid 上线后,踢出原来的那个设备失败了(因为它正在断开…),导致新的这个连接会连接失败。这个问题在新版本已经修复了 我们会强制提出旧的连接

如果可以话,建议升级下 emqx 的版本,最好是最新的 4.4

升级版本,是否会对在线连接的设备产生影响?规则引擎是否会受影响?

那肯定都会有,不过只要不是大版本升级,大部分功能都是兼容的,你可以先下载一个最新的4.4来评估下