MqttPublishService.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.care.mqtt.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.care.common.cache.RedisUtil;
  4. import com.care.common.constant.Constants;
  5. import com.care.common.util.CommonConfUtil;
  6. import com.care.mqtt.tool.MqttDataConnector;
  7. import com.care.common.entity.CareDevice;
  8. import com.care.mqtt.tool.MqttDataConnectorPool;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.util.StringUtils;
  11. import javax.annotation.Resource;
  12. /**
  13. * @Author: stw
  14. * @Date: 2021/8/14
  15. * @Desc:
  16. */
  17. @Service
  18. public class MqttPublishService {
  19. @Resource
  20. private MqttConnectorPoolService mqttConnectorPoolService;
  21. @Resource
  22. private RedisUtil redisUtil;
  23. /**
  24. * 发布消息
  25. */
  26. public boolean publish(CareDevice careDevice,String data,String devCode,String roomType) {
  27. try {
  28. CareDevice careDevicePublish = new CareDevice();
  29. BeanUtil.copyProperties(careDevice,careDevicePublish);
  30. String topic = careDevicePublish.getTopic();
  31. String cliendId = careDevicePublish.getClientId();
  32. if (StringUtils.isEmpty(topic) || StringUtils.isEmpty(cliendId)) {
  33. return false;
  34. }
  35. String publishTopic = topic.replace("event","control");
  36. String publishCliendId = cliendId + "_publish";
  37. careDevicePublish.setTopic(publishTopic);
  38. careDevicePublish.setClientId(publishCliendId);
  39. MqttDataConnector mqttDataConnector = mqttConnectorPoolService.addOne(careDevicePublish);
  40. mqttDataConnector.publish(publishTopic, data);
  41. //往redis里设置一个超时时钟,超时之后还没返回就认为超时了
  42. Long timeout = Long.parseLong(CommonConfUtil.getConf("mqtt.dev.jihuo.timeout"));
  43. redisUtil.set(Constants.MQTT_DEV_JIHUO_TIMEOUT_KEY + ":" + devCode + ":" + roomType,"", timeout);
  44. return true;
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. return false;
  48. }
  49. }
  50. }