JAVA-MQTT使用
MAVEN依赖
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
配置类
@Value("${govappt.dev.mqtt.broker:tcp://127.0.0.1:1883}")
private String mqttBroker;
@Value("${govappt.dev.mqtt.clientId:gov-appt-***}")
private String mqttClientId;
@Value("${govappt.dev.mqtt.username:admin}")
private String mqttUsername;
@Value("${govappt.dev.mqtt.password:public}")
private String mqttPassword;
@Bean
MqttClient mqttClient() {
try {
MemoryPersistence persistence = new MemoryPersistence();
MqttClient client = new MqttClient(mqttBroker, mqttClientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName(mqttUsername);
connOpts.setPassword(mqttPassword.toCharArray());
connOpts.setCleanSession(true);
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
log.info("mqtt:connectionLost", throwable);
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
log.info("mqtt:messageArrived,{},{}", s, mqttMessage);
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
log.info("mqtt:messadeliveryCompletegeArrived,{}", iMqttDeliveryToken);
}
});
client.connect(connOpts);
return client;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
发送消息
@Autowired
MqttClient mqttClient;
@Value("${gov-appt.sn:002}")
private String devSn;
public void syncConfig() {
MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setPayload("startSyncConfig".getBytes());
try {
mqttClient.publish("/govappt/***/" + devSn, mqttMessage);
log.info("发送同步配置消息");
} catch (MqttException e) {
throw new RuntimeException(e);
}
}
接收消息
@PostConstruct
public void init() {
try {
mqttClient.subscribe("/govappt/***/" + devSn, new IMqttMessageListener() {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("Received message: " + new String(message.getPayload()));
processMessage(new String(message.getPayload()));
}
});
mqttClient.subscribe("/govappt/admin/" + devSn, new IMqttMessageListener() {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
log.info("接收同步配置消息:{}", message.getPayload());
System.out.println("Received message: " + new String(message.getPayload()));
syncConfig(new String(message.getPayload()));
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@PreDestroy
public void cleanUp() {
try {
mqttClient.unsubscribe("/govappt/platform");
} catch (Exception e) {
e.printStackTrace();
}
}