<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
1.模擬客戶端接收消息
import java.util.concurrent.ScheduledExecutorService;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class ClientMQTT {
public static final String HOST = "tcp://192.168.1.77:1883";
public static final String TOPIC1 = "pos_message_all";
private static final String clientid = "12345678";
private MqttClient client;
private MqttConnectOptions options;
private String userName = "mqtt";
private String passWord = "mqtt";
private ScheduledExecutorService scheduler;
private void start() {
try {
client = new MqttClient(HOST, clientid, new MemoryPersistence());
options = new MqttConnectOptions();
options.setCleanSession(false);
options.setUserName(userName);
options.setPassword(passWord.toCharArray());
options.setConnectionTimeout(10);
options.setKeepAliveInterval(20);
options.setAutomaticReconnect(true);
client.setCallback(new PushCallback());
MqttTopic topic = client.getTopic(TOPIC1);
options.setWill(topic, "close".getBytes(), 1, true);
client.connect(options);
int[] Qos = {1};
String[] topic1 = {TOPIC1};
client.subscribe(topic1, Qos);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ClientMQTT client = new ClientMQTT();
client.start();
}
2.模擬服務端發送消息
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class ServerMQTT {
public static final String HOST = "tcp://192.168.1.77:1883";
public static final String TOPIC = "pos_message_all";
private static final String clientid = "server11";
private MqttClient client;
private static MqttTopic topic11;
private static MqttMessage message;
public ServerMQTT() throws MqttException {
client = new MqttClient(HOST, clientid, new MemoryPersistence());
connect();
}
private void connect() {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setConnectionTimeout(10);
options.setKeepAliveInterval(20);
try {
client.setCallback(new PushCallback());
client.connect(options);
topic11 = client.getTopic(TOPIC);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException,
MqttException {
MqttDeliveryToken token = topic.publish(message);
token.waitForCompletion();
System.out.println("message is published completely! "
+ token.isComplete());
}
public static void sendMessage(String clieId,String msg)throws Exception{
ServerMQTT server = new ServerMQTT();
server.message = new MqttMessage();
server.message.setQos(1);
server.message.setRetained(true);
String str ="{\"clieId\":\""+clieId+"\",\"mag\":\""+msg+"\"}";
server.message.setPayload(str.getBytes());
try{
publish(server.topic11 , server.message);
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
sendMessage("123444","哈哈");
}
}
3.發佈消息回調類
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class PushCallback implements MqttCallback {
public void connectionLost(Throwable cause) {
System.out.println("連接斷開,可以做重連");
}
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------" + token.isComplete());
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("接收消息主題 : " + topic);
System.out.println("接收消息Qos : " + message.getQos());
System.out.println("接收消息內容 : " + new String(message.getPayload()));
}
}