一、publish发布主题发布消息
package jmh.netty;
import io.netty.buffer.Unpooled;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.handler.codec.mqtt.MqttQoS;
import io.netty.util.concurrent.Future;
import java.io.UnsupportedEncodingException;
import nl.jk5.mqtt.MqttClient;
import nl.jk5.mqtt.MqttClientConfig;
import nl.jk5.mqtt.MqttConnectResult;
public class NettyMQTT {
private static int qos = 2; //只有一次
private static String host = "192.168.0.103";
private static int port=1883;
private static String userName = "nettypub";
private static String passWord = "nettypub";
public static MqttClient create(String clientid,int eventLoopNums){
MqttClientConfig mqttClientConfig = new MqttClientConfig();
mqttClientConfig.setUsername(userName);
mqttClientConfig.setPassword(passWord);
mqttClientConfig.setCleanSession(true);
mqttClientConfig.setClientId(clientid);
mqttClientConfig.setTimeoutSeconds(30);
MqttClient mqttClient = MqttClient.create(mqttClientConfig);
mqttClient.setEventLoop(new NioEventLoopGroup(eventLoopNums));
return mqttClient;
}
public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException {
MqttClient mqttClient = create("netty-client-1",16);
Future<MqttConnectResult> connectFuture = mqttClient.connect(host,port);
connectFuture.addListener(result->{
if(result.isSuccess()) {
Future<Void> future = mqttClient
.publish("jmh/netty/future/retain",
Unpooled.wrappedBuffer("message netty 1".getBytes("utf-8")),
MqttQoS.EXACTLY_ONCE, true);
future.addListener(f -> {
System.out.println("发布完成");
});
}
else {
System.out.println(result.toString());
}
});
Thread.sleep(50000);
}
}
二、subscribe订阅主题接收消息
package jmh.netty;
import io.netty.handler.codec.mqtt.MqttQoS;
import io.netty.util.concurrent.Future;
import nl.jk5.mqtt.MqttClient;
import nl.jk5.mqtt.MqttConnectResult;
public class NettySubMsg {
private static String host = "192.168.0.103";
private static int port=1883;
public static void main(String[] args) throws InterruptedException {
MqttClient mqttClient = NettyMQTT.create("netty-client-2",16);
Future<MqttConnectResult> connectFuture = mqttClient.connect(host,port);
connectFuture.addListener(result-> {
if (result.isSuccess()) {
Future<Void> future = mqttClient
.on("jmh/netty/future/retain", (topic, byteBuf) -> {
},MqttQoS.EXACTLY_ONCE);
future.addListener(f -> {
System.out.println("订阅完成");
});
} else {
System.out.println(result.toString());
}
});
Thread.sleep(50000);
}
}