# 动作

动作是用于处理规则的输出结果的组件,决定了数据的最终去向。

目前规则支持以下两种动作:

  • 内置动作:目前仅有两种内置动作:消息重发布(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

提示

“控制台输出”动作仅用于规则测试过程中的调试,用于生产环境将引起性能问题。