1.Java代码实现mqtt的连接(springboot),以及发布消息方法
(1).server()实现了mqtt的连接,其中你的订阅消息主题可能是多个的,详情可以查看client.subscribe(subTopic,qos)方法的源码。
(2).publish()可以通过controller层调用该接口实现消息的发布,消息的发布主题和消息内容根据你自己去定义。
@Slf4j
@Component
public class MyMqttServer {
private MqttClient client;
private Integer qos = 0;//可设置为0,1,2,根据你的需求来设置;
@PostConstruct
public void server() {
String broker = "myTestBroker";//这里填写你需要连接的地址
String clientId = "myTestClientId";//这个可以随便填写,但是必须是唯一的
String subTopic = "myTestSubTopic";//订阅消息的主题
MemoryPersistence persistence = new MemoryPersistence();
try {
client = new MqttClient(broker, clientId, persistence);
// MQTT 连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
// 保留会话
connOpts.setCleanSession(false);
connOpts.setAutomaticReconnect(true);
// 建立连接
client.connect(connOpts);
// 订阅
client.subscribe(subTopic,qos);
// 设置回调,监听云端发布的消息
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
// 连接丢失后,一般在这里面进行重连
log.info("mqtt服务连接断开,进行重连");
try {
// 尝试重新连接
if(!client.isConnected()){
client.reconnect();
}
} catch (MqttException e) {
log.error("重连失败:[{}]",e.getMessage());
}
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// subscribe后得到的消息会执行到这里面
log.info("接收消息主题:{}" , topic);
String content = new String(message.getPayload(), StandardCharsets.UTF_8);
log.info("接收消息内容:{}",content);
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
log.info("消息发布结果[{}]", token.isComplete());
}
});
} catch (Exception e) {
log.error("mqtt通讯错误,[{}]",e.getCause().getMessage());
}
}
/**
* 发布消息
*/
public void publish(){
//你的消息发布主题
String pubTopic ="myPubTopic";
//你发送的消息内容
String content = "帅哥,美女,你们好";
try {
// 消息发布所需参数
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
client.publish(pubTopic, message);
} catch (Exception e) {
log.error("发布消息失败:{}",e.getMessage());
}
}
}
2.需要导入的依赖
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
3.发布,订阅的测试
1.mqtt客户端配置,可以填写好mqtt连接信息
mqtt下载链接:MQTTX:全功能 MQTT 客户端工具
2.工具连接mqtt,添加订阅主题
3.使用工具发布消息后,代码中订阅消息
4.调用publish方法去发布消息,使用工具去订阅