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
以上;
仅供参考,如果有不正确的,欢迎指正。勿喷
版权声明:本文为qq_35909525原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。