• 接收Mqtt数据


    结构:

     


    1.定义一个接收接口 MessageGranter.java
    public interface MessageGranter {
    
        void grant(String topic, Message<?> message);
    }

    2.定义一个抽象类 AbstractMessageGranter.java 实现MessageGranter 

    public abstract class AbstractMessageGranter implements MessageGranter {
    
        private final List<String> grantTypes;
    
        public AbstractMessageGranter(List<String> grantType) {
            this.grantTypes = grantType;
        }
    
        @Override
        public void grant(String topic, Message<?> message) {
            if (this.grantTypes.contains(topic)) {
                processMessage(message);
            }
    
        }
        protected abstract void processMessage(Message<?> message);
    }

    3.定义一个真正的实现类 VehicleCollectionGranter.java

    @Service
    @Slf4j
    public class VehicleCollectionGranter extends AbstractMessageGranter {
    
        private static final List<String> GRANT_TYPE = Collections.singletonList("transmit");
    
        public VehicleCollectionGranter() {
            super(GRANT_TYPE);
        }
    
        @Override
        protected void processMessage(Message<?> message) {
            log.info("mqtt receive message :{}", JSON.toJSONString(message));
            String jsonMsg = String.valueOf((message.getPayload()));
            if (StrUtil.isBlank(jsonMsg)) {
                return;
            }
            VehicleCollectRecordDTO vehicleCollectRecordDTO = JSON.parseObject(jsonMsg, VehicleCollectRecordDTO.class);
    
        }
    }

    4.定义一个封装类 CompositeMessageGranter.java

    @Service
    public class CompositeMessageGranter {
    
        @Autowired
        private List<MessageGranter> granterList;
    
        public void process(String topic, Message<?> message) {
            granterList.forEach(
                    g -> {
                        g.grant(topic, message);
                    });
        }
    }

    5.MQTTHandler.java
    @Component
    @Slf4j
    public class MQTTHandler implements MessageHandler {
        public static final String MQTT_TOPIC = "mqtt_receivedTopic";
    
        @Autowired
        private CompositeMessageGranter compositeMessageGranter;
    
    
        @Override
        public void handleMessage(Message<?> message) {
            handle(message);
        }
    
        private void handle(Message<?> message) {
            MessageHeaders headers = message.getHeaders();
            String topic = ObjectUtil.isNotNull(headers.get(MQTT_TOPIC)) ? headers.get(MQTT_TOPIC).toString() : "";
            if (StrUtil.isNotBlank(topic)) {
                compositeMessageGranter.process(topic, message);
            }
        }
    
    
    }
  • 相关阅读:
    对PostgreSQL中bufmgr.c 中 bufs_to_lap的初步理解
    bgwriter 的睡眠时间差异
    对PostgreSQL中bufmgr.c 中 num_to_scan 的初步理解
    对PostgreSQL中bufmgr.c的进一步学习
    PHP 接收长url并重定向
    Request.ServerVariables小结
    Kiss Asp Framework 0.2.0RC Releaseed
    FLV编码、转换、录制、播放方案
    ASP错误信息
    Gzip简介
  • 原文地址:https://www.cnblogs.com/zcjyzh/p/16080356.html
Copyright © 2020-2023  润新知