WebHook

    WebHook 的内部实现是基于 钩子,但它更靠近顶层一些。它通过在钩子上的挂载回调函数,获取到 EMQX 中的各种事件,并转发至 emqx_web_hook 中配置的 Web 服务器。

    以 客户端成功接入(client.connected) 事件为例,其事件的传递流程如下:

    提示

    WebHook 对于事件的处理是单向的,它仅支持将 EMQX 中的事件推送给 Web 服务,并不关心 Web 服务的返回。 借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。

    Webhook 的配置文件位于 ,配置项的详细说明可以查看 配置项

    etc/plugins/emqx_web_hook.conf 可配置触发规则,其配置的格式如下:

    目前支持以下事件:

    同一个事件可以配置多个触发规则,配置相同的事件应当依次递增。

    • action:字符串,取固定值
    • topic:字符串,表示一个主题过滤器,操作的主题只有与该主题匹配才能触发事件的转发

    例如,我们只将与 a/b/cfoo/# 主题匹配的消息转发到 Web 服务器上,其配置应该为:

    这样 Webhook 仅会转发与 a/b/cfoo/# 主题匹配的消息,例如 foo/bar 等,而不是转发 a/b/d 或 。

    事件触发时 Webhook 会按照配置将每个事件组成一个 HTTP 请求发送到 url 所配置的 Web 服务器上。其请求格式为:

    对于不同的事件,请求 Body 体内容有所不同,下表列举了各个事件中 Body 的参数列表:

    client.connect

    Key类型说明
    actionstring事件名称
    固定为:”client_connect”
    clientidstring客户端 ClientId
    usernamestring客户端 Username,不存在时该值为 “undefined”
    ipaddressstring客户端源 IP 地址
    keepaliveinteger客户端申请的心跳保活时间
    proto_verinteger协议版本号

    client.connack

    Key类型说明
    actionstring事件名称
    固定为:”client_connack”
    clientidstring客户端 ClientId
    usernamestring客户端 Username,不存在时该值为 “undefined”
    ipaddressstring客户端源 IP 地址
    keepaliveinteger客户端申请的心跳保活时间
    proto_verinteger协议版本号
    conn_ackstring“success” 表示成功,其它表示失败的原因

    client.connected

    client.disconnected

    Key类型说明
    actionstring事件名称
    固定为:”client_disconnected”
    clientidstring客户端 ClientId
    usernamestring客户端 Username,不存在时该值为 “undefined”
    reasonstring错误原因
    Key类型说明
    actionstring事件名称
    固定为:”client_subscribe”
    clientidstring客户端 ClientId
    usernamestring客户端 Username,不存在时该值为 “undefined”
    topicstring将订阅的主题
    optsjson订阅参数

    opts 包含

    client.unsubscribe

    Key类型说明
    actionstring事件名称
    固定为:”client_unsubscribe”
    clientidstring客户端 ClientId
    usernamestring客户端 Username,不存在时该值为 “undefined”
    topicstring取消订阅的主题

    session.subscribed:同 client.subscribe,action 为 session_subscribed

    session.unsubscribed:同 client.unsubscribe,action 为 session_unsubscribe

    session.terminated: 同 ,action 为 session_terminated

    message.publish

    Key类型说明
    actionstring事件名称
    固定为:”message_publish”
    from_client_idstring发布端 ClientId
    from_usernamestring发布端 Username,不存在时该值为 “undefined”
    topicstring取消订阅的主题
    qosenumQoS 等级,可取 0 1 2
    retainbool是否为 Retain 消息
    payloadstring消息 Payload
    tsinteger消息的时间戳(毫秒)

    message.delivered

    message.acked

    Key类型说明
    actionstring事件名称
    固定为:”message_acked”
    clientidstring接收端 ClientId
    from_client_idstring发布端 ClientId
    from_usernamestring发布端 Username,不存在时该值为 “undefined”
    topicstring取消订阅的主题
    qosenumQoS 等级,可取 0 2
    retainbool是否为 Retain 消息
    payloadstring消息 Payload
    tsinteger消息时间戳(毫秒)