EMQX 的webHook使用

it2025-12-22  8

1、EMQX相关命令

      4.0.5之后版本启动需要进入安装路径下/etc/emqx

      emqx stop  停止命令

      emqx start  启动命令

2、webhook处理设备离线

      找到安装路径中的plugins。我的路径是/etc/emqx/plugins。最下面有emqx_web_hook.conf,使用vim编辑。

       

     文字为

web.hook.api.url = ip:端口/webHook/onJkWebHook web.hook.rule.client.disconnected.1 = {"action": "on_client_disconnected"}

   其他没有用到的注释掉。注释用##

   url后接的地址,就是如果设备离线,你想做的补偿机制或者说是需要处理的业务请求。

/** * webHook设备连接中断监听 * * @author sunhl * @date 2020/1/13 14:33 */ @Slf4j @AllArgsConstructor @RestController @RequestMapping("/webHook") public class JkWebHookController { @Autowired private RedisTemplate redisTemplate; @PostMapping("/onJkWebHook") public void onWebHook(@RequestBody Map<String, String> param) { log.info("webHook设备连接中断监听,传入参数:{}", param); String action = MapUtils.getString(param, "action", ""); if ("client_disconnected".equals(action)) { log.info("MQX 断开连接接收参数:{}", param); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new StringRedisSerializer()); String pdid = MapUtils.getString(param, "client_id", ""); if(StringUtils.isEmpty(pdid)){ pdid = MapUtils.getString(param, "clientid", ""); } log.info("设备ID:{},为在线状态,设备已经断开连接,进行下线补偿", pdid); if(redisTemplate.opsForHash().hasKey(CommonConstants.LOGIN_STATUS, pdid)){ redisTemplate.opsForHash().put(CommonConstants.LOGIN_STATUS, pdid, "2"); } } } }

@AllArgsConstructor 使用的是lombok

 

以上;

仅供参考,如果有不正确的,欢迎指正。勿喷

 

 

最新回复(0)