接收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);
        }
    }


}

 

posted @ 2022-03-31 09:46  郑某人1  阅读(320)  评论(0编辑  收藏  举报