| | |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | |
| | | import java.util.*; |
| | | |
| | |
| | | private RedisUtil redisUtil; |
| | | @Autowired |
| | | private EmqxApi emqxApi; |
| | | @Autowired |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | |
| | | @Bean |
| | |
| | | // 订阅租户实时数据 |
| | | mqttClient.subscribe(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA); |
| | | System.out.println("admin订阅" + MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA); |
| | | // 订阅租户报警数据 |
| | | mqttClient.subscribe(MqttConstant.TENANT_UP_PREFIX_REAL_FAULT_DATA); |
| | | System.out.println("admin订阅" + MqttConstant.TENANT_UP_PREFIX_REAL_FAULT_DATA); |
| | | mqttClient.subscribe(MqttConstant.TENANT_UP_PREFIX_FAULT_DATA); |
| | | System.out.println("admin订阅" + MqttConstant.TENANT_UP_PREFIX_FAULT_DATA); |
| | | mqttClient.subscribe(MqttConstant.TENANT_UP_PREFIX_EQU); |
| | | System.out.println("admin订阅" + MqttConstant.TENANT_UP_PREFIX_EQU); |
| | | initClients(); |
| | | |
| | | break; |
| | |
| | | * 服务端(admin角色)启动时查询所有设备并缓存到redis |
| | | */ |
| | | private void initClients() { |
| | | redisUtil.del(MqttConstant.MQTT_ONLINE_CLIENT); |
| | | //初始化时先删除所有在线设备 |
| | | Set keys = redisTemplate.keys( String.format(MqttConstant.MQTT_ONLINE_CLIENT,"*")); |
| | | if (keys != null && !keys.isEmpty()) { |
| | | keys.forEach(key -> System.out.println("初始化删除在线设备: " + key)); |
| | | redisTemplate.delete(keys); |
| | | } else { |
| | | System.out.println("初始化无在线设备: " + MqttConstant.MQTT_ONLINE_CLIENT); |
| | | } |
| | | |
| | | JSONObject clients = emqxApi.queryEmqx(EmqxApi.CMD_CLIENTS); |
| | | //TODO 根据emqx返回编写实体类 |
| | |
| | | //是否连接 |
| | | Boolean connected = obj.getBoolean("connected"); |
| | | item.put("connected", connected); |
| | | // |
| | | String[] info = clientid.split("-"); |
| | | item.put("type", info[0]); |
| | | item.put("tenantId", info[1]); |
| | | item.put("code", info[2]); |
| | | //根据clientid解析(注意配置文件中clientid格式 例:client-1000) |
| | | try { |
| | | String[] info = clientid.split("-"); |
| | | item.put("type", info[0]); |
| | | item.put("tenantId", info[1]); |
| | | //item.put("code", info[2]); |
| | | |
| | | if (connected) { |
| | | redisUtil.set(MqttConstant.MQTT_ONLINE_CLIENT + clientid, item); |
| | | if (connected) { |
| | | redisUtil.hset(String.format(MqttConstant.MQTT_ONLINE_CLIENT,item.get("tenantId").toString()) , clientid, item); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | } |