1.什么是MQTT
https://zhuanlan.zhihu.com/p/20888181
2.MQTT的框架模式
3.MQTT的Java(paho)实现之Hello World
服务器端:
import java.util.Arrays; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MTest { public static void main(String[] args) { int qos = 2;//设置服务质量 String broker = "tcp://*:1883"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient sampleClient = new MqttClient(broker, "mtest",persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); System.out.println("Connecting to broker: " + broker); sampleClient.connect(connOpts); sampleClient.subscribe("backTest");//订阅主题 System.out.println("Connected"); System.out.println("Publishing message: hello i am mtest");//发布消息 MqttMessage message = new MqttMessage("Publishing message: hello i am mtest".getBytes()); message.setQos(qos); sampleClient.publish("MQTT Examples", message); System.out.println("Message published"); sampleClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { //Called when the client lost the connection to the broker } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println(topic + ": " + new String(message.getPayload(),"UTF-8")); } @Override public void deliveryComplete(IMqttDeliveryToken token) {//Called when a outgoing publish is complete } }); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); me.printStackTrace(); } } }
客户端:
import java.util.Arrays; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class STest { public static void main(String[] args) { String broker = "tcp://*:1883";//另一端地址 MemoryPersistence persistence = new MemoryPersistence(); try { final MqttClient sampleClient = new MqttClient(broker, "stest" , persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); System.out.println("Connecting to broker: " + broker); sampleClient.connect(connOpts); sampleClient.subscribe("MQTT Examples");//订阅主题 System.out.println("Connected"); sampleClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { //Called when the client lost the connection to the broker } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println("i Got the message:"); System.out.println(topic + ": " + new String(message.getPayload(),"UTF-8")); System.out.println("i Send the message:"); MqttMessage message1 = new MqttMessage("Publishing message:hello , i am stest ".getBytes()); message1.setQos(2); sampleClient.publish("backTest", message1); System.out.println("Message published"); } @Override public void deliveryComplete(IMqttDeliveryToken token) {//Called when a outgoing publish is complete } }); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); me.printStackTrace(); } } }