1. 引入POM文件
<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> <!-- 请检查最新版本 --> </dependency>mqtt: broker: url: tcp://127.0.0.1:1883 clientId: mqtt username: JavaServer password: 123456 topic: 23333 qos: 1
2. 编写配置Java文件
@Configuration
public class MqttConfig {
@Value("${mqtt.broker.url}")
private String brokerUrl;
@Value("${mqtt.broker.clientId}")
private String clientId;
@Value("${mqtt.broker.username}")
private String username;
@Value("${mqtt.broker.password}")
private String password;
@Value("${mqtt.broker.topic}")
private String topic;
@Value("${mqtt.broker.qos}")
private int qos;
@Bean
public MqttClient mqttClient() throws MqttException {
return new MqttClient(brokerUrl, clientId);
}
@Bean
public MqttConnectOptions connectOptions() {
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setCleanSession(true);
options.setConnectionTimeout(10);
options.setUserName(username);
options.setPassword(password.toCharArray());
return options;
}
}
3. 增加订阅的消费类
@Slf4j @Service @RequiredArgsConstructor public class MqttMessageHandler implements MqttCallback { private final MqttSender mqttSender; @Override public void connectionLost(Throwable throwable) { log.info("Connection to MQTT broker lost."); } @Override public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { log.info("mqtt topic: {} 收到消息: {}", topic, new String(mqttMessage.getPayload())); // 收到消息发送消息 mqttSender.sendMqttMessage("IrsAlarmMessageTop", "testsdfsd"); } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { log.info("Message delivery completed."); } }
4.测试消息发送
@Service @Slf4j @RequiredArgsConstructor public class MqttSender { private final MqttClient mqttClient; private final MqttConnectOptions options; public void sendMqttMessage(String topic, String messageContent) throws MqttException { if (!mqttClient.isConnected()) { mqttClient.connect(options); } MqttMessage mqttMessage = new MqttMessage(messageContent.getBytes()); mqttClient.publish(topic, mqttMessage); } }