结构:
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); } } }