EMQ上下线消息订阅

很多时候我们的业务中需要监听设备是否上线,之前我们一直采用的两种方案,一种是设备客户端上线是自动发送一条消息;另一种是,找一个开源的服务器,通过源码监听。
最近发现EMQ的共同非常强大,会将系统信息封装成系统主题,所以我们只要订阅系统主题就可以接受到消息,
我订阅了:“$SYS/brokers/[email protected]/clients/#”主题,其他论坛里说:“$SYS/brokers/[email protected]/clients/#”当我尝试后者的时候收不到消息(查官方文档大部分也是[email protected]),接受到上线信息的主题为:“$SYS/brokers/[email protected]/clients/front02/connected
下线信息为:“$SYS/brokers/[email protected]/clients/122/disconnected
坑一:disconnected和connected的结尾一样,都是connected,所以判断的时候一定要加上”/”topic.endsWith("/connected"),这样来匹配
坑二:这里默认只能通过127.0.0.1地址来连,所以,如果想用其他主机订阅系统消息的时候,通过修改etc/acl.conf文件,allow表示允许

%% 允许'dashboard'用户订阅 '$SYS/#'
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
%% 允许ip地址127.0.0.1订阅和发布全部主题
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
%% 不允许所有用户订阅系统主题
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

我们可以将第二条改为:将xxx替换为你的IP地址,当然可以直接用all允许全部

{allow, {ipaddr, "127.0.0.1","xxx.xxx.xxx.xxx"}, pubsub, ["$SYS/#", "#"]}.

EMQ还有很多强大功能,可以参考EMQ 的文档,http://emqtt.com/docs/v2/index.html,这里我也是从文档中看到的功能,不知道为何,EMQ的文章非常少

你可能感兴趣的:(java)