空动作 (调试)

空动作 (调试)

创建一个测试规则,当有消息发送到 ‘t/a’ 主题时,打印消息内容以及动作参数细节。

  • 规则的筛选 SQL 语句为: SELECT * FROM “t/a”;
  • 动作是: “打印动作参数细节”,需要使用内置动作 ‘inspect’。
$ ./bin/emqx_ctl rules create \
 "SELECT * FROM \"t/a\" WHERE " \
 '[{"name":"inspect", "params": {"a": 1}}]' \
 -d 'Rule for debug'

Rule rule:803de6db created

上面的 CLI 命令创建了一个 ID 为 ‘Rule rule:803de6db’ 的规则。

参数中前两个为必参数:

  • SQL 语句: SELECT * FROM “t/a”
  • 动作列表: [{“name”:”inspect”, “params”: {“a”: 1}}]。动作列表是用 JSON Array 格式表示的。name 字段是动作的名字,params 字段是动作的参数。注意 inspect 动作是不需要绑定资源的。

最后一个可选参数,是规则的描述: ‘Rule for debug’。

接下来当发送 “hello” 消息到主题 ‘t/a’ 时,上面创建的 “Rule rule:803de6db” 规则匹配成功,然后 “inspect” 动作被触发,将消息和参数内容打印到 emqx 控制台:

$ tail -f log/erlang.log.1

(emqx@127.0.0.1)1> [inspect]
    Selected Data: #{client_id => <<"shawn">>,event => 'message.publish',
                    flags => #{dup => false,retain => false},
                    id => <<"5898704A55D6AF4430000083D0002">>,
                    payload => <<"hello">>,
                    peername => <<"127.0.0.1:61770">>,qos => 1,
                    timestamp => 1558587875090,topic => <<"t/a">>,
                    username => undefined}
    Envs: #{event => 'message.publish',
            flags => #{dup => false,retain => false},
            from => <<"shawn">>,
            headers =>
                #{allow_publish => true,
                    peername => {{127,0,0,1},61770},
                    username => undefined},
            id => <<0,5,137,135,4,165,93,106,244,67,0,0,8,61,0,2>>,
            payload => <<"hello">>,qos => 1,
            timestamp => {1558,587875,89754},
            topic => <<"t/a">>}
    Action Init Params: #{<<"a">> => 1}
  • Selected Data 列出的是消息经过 SQL 筛选、提取后的字段,由于我们用的是 select *,所以这里会列出所有可用的字段。
  • Envs 是动作内部可以使用的环境变量。
  • Action Init Params 是初始化动作的时候,我们传递给动作的参数。