环境
- EMQX 版本:5.3.0
- 操作系统版本:Debian GNU/Linux 11 (bullseye)
重现此问题的步骤
- 规则中SQL编辑器设置如下
SELECT
*
FROM
"$events/message_delivered",
"$events/message_acked",
"$events/message_dropped",
"$events/delivery_dropped"
WHERE topic != 'client_action'
重发布设置如下:
预期行为
当订阅message_action时,应该收到所有重发布的消息。
实际行为
在对消息条数进行统计时发现,有部分消息没有进行重发布,6000余条需要重发布的消息中有246条未进行发布。
数据流
桥接器将作为客户端登录到emqx并保持连接,同时订阅某个rocketmq的topic,mq下发的消息体中带有payload和topic,桥接器模块将逐条进行处理,将每一条mq中的消息丢到对应的topic中,在这个过程中,根据上述配置的重发布规则,桥接器模块每次转发将产生一些事件被丢到message_action topic中。
对于成功重发布的消息所产生的日志如下:
{
"message": "2024-05-16T11:13:11.630319+00:00 [error] msg: recursive_republish_detected, mfa: emqx_rule_actions:republish/3(111), peername: xx.xxx.x.x:xxxx, clientid: consumer-biz001_1713174988356, topic: message_action\n[rule action] message_action_xxxxx\n\tAction Data: #{clientid => <<\"consumer-biz001_1713174988356\">>,\n event => 'message.acked',\n flags => #{dup => false,retain => false},\n from_clientid => <<\"message_action_xxxxx\">>,\n from_username => undefined,\n id => <<\"000618905213742F9BE53B023A7F0005\">>,\n metadata => #{rule_id => <<\"message_action_xxxxx\">>},\n node =>\n 'emqx@emqx-2.emqx-headless.mqttmp.svc.cluster.local',\n payload =>\n <<xxxxxxx,\n xxxxxxxxxxxxx,\n xxxxxx"
}
没有重发布的消息的时间段产生的日志如下:
{
"message": "2024-05-16T13:40:17.956800+00:00 [info] msg: terminate, mfa: emqx_connection:terminate/2(673), peername: xx.xxx.x.x:xxxx, clientid: 1491, reason: {shutdown,not_authorized}"
}
{
"message": "2024-05-16T13:40:20.413679+00:00 [info] msg: authorization_permission_allowed, mfa: emqx_authz:log_allowed/1(438), peername: xx.xxx.x.x:xxxx, clientid: bridge-adapter_1715864958418, topic: XXXXX/CMD/154d4a4697a5efaa7dc2fc041df51ce3, ipaddr: {xx.xxx.x.x:xxxx}, source: file, username: <<\"bridge-adapter\">>"
}
{
"message": "2024-05-16T13:40:21.102351+00:00 [info] msg: terminate, mfa: emqx_connection:terminate/2(673), peername:xx.xxx.x.x:xxxx, clientid: 55, reason: {shutdown,tcp_closed}"
}
{
"message": "2024-05-16T13:40:21.644536+00:00 [info] msg: authorization_permission_allowed, mfa: emqx_authz:log_allowed/1(438), peername: xx.xxx.x.x:xxxx, clientid: 55, topic: XXXXX/CMD/2c8fbb552593327450ce12d28773462e, ipaddr: {xx.xxx.x.x:xxxx}, source: file, username: <<\"XXXXXXXXXXXXXXXXXXXXXX\">>"
}
其中的2024-05-16T13:40:20.413679+00:00 这条,桥接器模块日志显示,收到了一条业务mq,并进行处理后丢到了对应的emqx topic中,另一个订阅此topic的mqtt client也成功的收到了这条消息,但是并没有进行重发布到message_action,请问能帮忙分析下为什么没有进行重发布吗?以及 msg: authorization_permission_allowed, mfa: emqx_authz:log_allowed/1(438)这个msg表示什么含义?
还有两个需要咨询的问题是规则的dashboard中
有几类指标:命中,通过,失败,无结果
为什么无结果全部集中在最后一个节点?
无结果在emqx中表示什么含义?