# 动作
动作是用于处理规则的输出结果的组件,决定了数据的最终去向。
目前规则支持以下两种动作:
- 内置动作:目前仅有两种内置动作:消息重发布(
republish
) 和控制台输出(console
)。 - 数据桥接:数据桥接是通往外部数据系统的通道,规则可以直接使用数据桥接的 ID 作为动作, 将规则的输出交给数据桥接处理。关于数据桥接的细节,详见 数据桥接。
# “消息重发布”动作
“消息重发布”动作用来发布一条新的 MQTT 消息,适用于需要向设备发送下行消息的场景。
提示
“消息重发布”动作不会阻止原来的消息的投递。举例来说,如果一条 "a/1" 消息通过规则触发了重发布动作, 并发出一条新的消息 "a/2",那么 "a/1" 消息仍然会被投递到订阅了该主题的客户端。
“消息重发布”动作里面,可以自定义消息的消息内容、主题、QoS 等参数, 可以用 ${field-name}
的形式引用规则输出里的字段作为参数值。
关于创建“消息重发布”动作的示例,请参见:规则快速入门-消息重发布
# “控制台输出”动作
“控制台输出”动作用于查看规则的输出结果,结果将以日志的形式打印到控制台里。
如果用是 emqx console
启动的 EMQX,结果将打印到前台。 如果用是 emqx start
启动的 EMQX,结果将打印到 EMQX 日志路径下的 erlang.log.*
文件里。
# 输出格式
输出第一行打印 [rule action]
头和规则的 ID。 从第二行开始打印分为两部分:
Action Data
部分为规则的输出结果,Action Data
中包含的字段都可以在动作的参数里面以${field-name}
的形式引用。Envs
为动作可用的环境变量信息。环境变量信息包含该数据源的所有可用字段,以及其他跟本次动作执行相关的内部信息。
输出格式示例:
[rule action] rule_id1
Action Data: #{key1 => val1}
Envs: #{key1 => val1, key2 => val2}
1
2
3
2
3
提示
“控制台输出”动作仅用于规则测试过程中的调试,用于生产环境将引起性能问题。