我正在运行emqttd(emqtt.io)。我想监视客户端从一个单独的进程连接和断开的过程,该进程将订阅一个发布生日和消息的系统主题。什么是正确的方法?

评论

欢迎使用IoT SE。您能否详细说明一下设置?您在哪种版本的机器上运行emqttd,以及在哪个版本上运行?

#1 楼


我想监视客户端从一个单独的进程连接和断开的过程,该进程将订阅发布出生和遗嘱消息的系统主题。


emqtt的用户指南显示了一个提供一些代理统计信息的系统主题,即$SYS/brokers/${node}/stats/clients/count提供了当前连接的客户端的数量。请注意,这不会列出有关已连接客户端的任何详细信息-因此,我认为这不是这里所需要的。

Last Will(LWT,Last Will和Testament)消息不是系统主题,而是客户端在连接期间设置的常规主题。如果您想监视该主题,只需订阅即可。但是请注意,如果客户端通过发送DISCONNECT消息正常断开连接,则LWT消息将被丢弃(请参见hiveMQ博客,敬请阅读btw)。

emqtt的《用户指南》提供了一种更好的方法来监视客户端的连接和断开连接:


./bin/emqttd_ctl命令行可用于查询和管理EMQ代理(不适用于Windows)。


我认为监视clients list-列出所有MQTT客户端-和clients show <ClientId>-显示MQTT客户端-在这里最有用。因此,计划的监视客户端的独立过程无需订阅代理,而只需利用./bin/emqttd_ctl


    $ ./bin/emqttd_ctl clients list
    Client(mosqsub/43832-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64896, connected_at=1452929113)
    Client(mosqsub/44011-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64961, connected_at=1452929275)



评论


很有用。感谢您抽出宝贵的时间。 emqttd_ctl可能提供了部分解决方案,但是,由于我们拥有pubsub,我希望您可以使用该机制来创建警报。我想这仍然可以通过要求客户发布出生和遗嘱消息来强制执行。

–法比恩·帕普鲁(Fabien Papleux)
17年1月14日下午5:33

#2 楼

好吧,不确定出生消息,根据规范LWT(《遗嘱》)是可选的。因此,除非您已为经纪人定制了此类要求,否则您不一定会收到消息。

评论


LWT是代表断开连接的客户端的代理。对于经纪人来说,实现不是可选的。客户设置“最后遗嘱”主题只是可选的。

–加纳马
17年1月11日在18:49

这就是我的意思。客户端可能不会将其作为连接数据包的一部分发送。

– cogitoergosum
17年1月11日在19:05