EMQX4.3.19 规则引擎转发失败

环境信息

  • EMQX 版本:4.3.19
  • 操作系统及版本:Centos7
  • 其他

问题描述

  1. 通过事件主题选择客户端连接事件 SELECT * FROM “$events/client_connected”
  2. 响应动作为data_to_mqtt_broker,已经命中但是转发失败
  3. 转发其他主题没问题

配置文件及日志

配置


日志

2022-09-16T01:05:27.192864403Z 2022-09-16T09:05:27.191590+08:00 [error] mqttx_854d7439@172.16.9.75:7506 Rule: <<"rule:667372">>; Action: data_to_mqtt_broker; Resource: <<"resource:17216975">>. Continue next action, reason: {error,function_clause,[{emqx_bridge_mqtt_actions,on_action_data_to_mqtt_broker,[#{clean_start => true,clientid => <<"mqttx_854d7439">>,conn_props => #{},connected_at => 1663290327191,event => 'client.connected',expiry_interval => 0,is_bridge => false,keepalive => 60,metadata => #{rule_id => <<"rule:667372">>},mountpoint => undefined,node => 'emqx@172.27.0.14',peername => <<"172.16.9.75:7506">>,proto_name => <<"MQTT">>,proto_ver => 5,receive_maximum => 32,sockname => <<"172.27.0.14:1883">>,timestamp => 1663290327191,username => <<"totolink">>},#{'__bindings__' => #{'ActId' => <<"data_to_mqtt_broker_1663223431452315345">>,'ForwardTopic' => <<"test">>,'Opts' => #{<<"$resource">> => <<"resource:17216975">>,<<"forward_topic">> => <<"test">>,<<"payload_tmpl">> => <<>>,<<"pool">> => 'bridge_mqtt:resource:17216975'},'PayloadTks' => [],'PayloadTmpl' => <<>>,'PoolName' => 'bridge_mqtt:resource:17216975','TopicTks' => [{str,<<"test">>}]},clean_start => true,clientid => <<"mqttx_854d7439">>,conn_props => #{},connected_at => 1663290327191,event => 'client.connected',expiry_interval => 0,is_bridge => false,keepalive => 60,metadata => #{action_name => data_to_mqtt_broker,resource_id => <<"resource:17216975">>,rule_id => <<"rule:667372">>},mountpoint => undefined,node => 'emqx@172.27.0.14',peername => <<"172.16.9.75:7506">>,proto_name => <<"MQTT">>,proto_ver => 5,receive_maximum => 32,sockname => <<"172.27.0.14:1883">>,timestamp => 1663290327191,username => <<"totolink">>}],[{file,"emqx_bridge_mqtt_actions.erl"},{line,501}]},{emqx_rule_runtime,take_action,5,[{file,"emqx_rule_runtime.erl"},{line,264}]},{emqx_rule_runtime,'-take_actions/4-lc$^0/1-0-',4,[{file,"emqx_rule_runtime.erl"},{line,255}]},{emqx_rule_runtime,do_apply_rule,2,[{file,"emqx_rule_runtime.erl"},{line,129}]},{emqx_rule_runtime,apply_rule,2,[{file,"emqx_rule_runtime.erl"},{line,62}]},{emqx_rule_runtime,apply_rules,2,[{file,"emqx_rule_runtime.erl"},{line,55}]},{emqx_hooks,safe_execute,2,[{file,"emqx_hooks.erl"},{line,207}]},{emqx_hooks,do_run,2,[{file,"emqx_hooks.erl"},{line,173}]},{emqx_channel,ensure_connected,1,[{file,"emqx_channel.erl"},{line,1714}]},{emqx_channel,process_connect,2,[{file,"emqx_channel.erl"},{line,502}]},{emqx_connection,with_channel,3,[{file,"emqx_connection.erl"},{line,662}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,362}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,368}]},{emqx_connection,handle_recv,3,[{file,"emqx_connection.erl"},{line,326}]},{proc_lib,wake_up,3,[{file,"proc_lib.erl"},{line,236}]}]}

4.3 && 4.4 的 MQTT Bridge 没办法转发 “$events/” 开头的事件。 emqx 5.0 是可以的。

客户端上线事件不是一个完整的消息,它没有明确且完整的 topic, 所以无法作为一条消息转发。考虑到兼容性问题我们没有对 4.3/4.4 进行改动。仅在 5.0 中作了改进。

对应的使用文档上没说不可用 :joy:

感谢反馈,我们将对文档进行增补。