基于:Eclipse paho 的MQTT Java客户端实现数据的发送和接收


MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议

使用场景:

1、不可靠、网络带宽小的网络

2、运行的设备CPU、内存非常有限


特点:

1、基于发布/订阅模型的协议

2、他是二进制协议,二进制的特点就是紧凑、占用空间小。他的协议头只有2个字节

3、提供了三种消息可能性保障:最多一次 0、最少一次 1、只有一次 2

maven依赖

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.eclipse.paho</groupId>  
  3.     <artifactId>org.eclipse.paho.client.mqttv3</artifactId>  
  4.     <version>1.1.1</version>  
  5. </dependency>  

发送消息示例

[java]  view plain  copy
  1. import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;  
  2. import org.eclipse.paho.client.mqttv3.MqttCallback;  
  3. import org.eclipse.paho.client.mqttv3.MqttClient;  
  4. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  
  5. import org.eclipse.paho.client.mqttv3.MqttException;  
  6. import org.eclipse.paho.client.mqttv3.MqttMessage;  
  7. import org.eclipse.paho.client.mqttv3.MqttPersistenceException;  
  8. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;  
  9.   
  10. /** 
  11.  * 发送数据到mqtt服务器 
  12.  * @author:涂有 
  13.  * @date 2017年8月16日 下午11:15:22 
  14.  */  
  15. public class PubMsg {  
  16.     private static int qos = 2//只有一次  
  17.     private static String broker = "tcp://10.100.124.206:1883";  
  18.     private static String userName = "tuyou";  
  19.     private static String passWord = "tuyou";  
  20.   
  21.       
  22.     private static MqttClient connect(String clientId,String userName,  
  23.             String password) throws MqttException {  
  24.         MemoryPersistence persistence = new MemoryPersistence();  
  25.         MqttConnectOptions connOpts = new MqttConnectOptions();  
  26.         connOpts.setCleanSession(true);  
  27.         connOpts.setUserName(userName);  
  28.         connOpts.setPassword(password.toCharArray());  
  29.         connOpts.setConnectionTimeout(10);  
  30.         connOpts.setKeepAliveInterval(20);  
  31. //      String[] uris = {"tcp://10.100.124.206:1883","tcp://10.100.124.207:1883"};  
  32. //      connOpts.setServerURIs(uris);  //起到负载均衡和高可用的作用  
  33.         MqttClient mqttClient = new MqttClient(broker, clientId, persistence);  
  34.         mqttClient.setCallback(new PushCallback("test"));  
  35.         mqttClient.connect(connOpts);  
  36.         return mqttClient;  
  37.     }  
  38.   
  39.     private static void pub(MqttClient sampleClient, String msg,String topic)   
  40.             throws MqttPersistenceException, MqttException {  
  41.         MqttMessage message = new MqttMessage("ertwersdfas".getBytes());  
  42.         message.setQos(qos);  
  43.         message.setRetained(false);  
  44.         sampleClient.publish(topic, message);  
  45.     }  
  46.       
  47.     private static void publish(String str,String clientId,String topic) throws MqttException{  
  48.         MqttClient mqttClient = connect(clientId,userName,passWord);  
  49.   
  50.         if (mqttClient != null) {  
  51.             pub(mqttClient, str, topic);  
  52.             System.out.println("pub-->" + str);  
  53.         }  
  54.   
  55.         if (mqttClient != null) {  
  56.             mqttClient.disconnect();  
  57.         }  
  58.     }  
  59.   
  60.     public static void main(String[] args) throws MqttException {  
  61.         publish("message content","client-id-0","$share/edge/server/public/a");  
  62.     }  
  63. }  
  64.   
  65. class PushCallback implements MqttCallback {  
  66.     private String threadId;  
  67.     public PushCallback(String threadId){  
  68.         this.threadId = threadId;  
  69.     }  
  70.       
  71.     public void connectionLost(Throwable cause) {  
  72.           
  73.     }  
  74.   
  75.     public void deliveryComplete(IMqttDeliveryToken token) {  
  76. //       System.out.println("deliveryComplete---------" + token.isComplete());  
  77.     }  
  78.   
  79.     public void messageArrived(String topic, MqttMessage message) throws Exception {  
  80.         String msg = new String(message.getPayload());  
  81.         System.out.println(threadId + " " + msg);  
  82.     }  
  83. }  


消费消息示例

[java]  view plain  copy
  1. import org.eclipse.paho.client.mqttv3.MqttClient;  
  2. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  
  3. import org.eclipse.paho.client.mqttv3.MqttException;  
  4. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;  
  5.   
  6. public class SubMsg {  
  7.   
  8. //   private static String topic = "$share/testgroup/wyptest1";  
  9. //   private static String topic = "$queue/wyptest1";  
  10. //   private static String topic = "wyptest1";  
  11.      private static int qos = 2;  
  12.      private static String broker = "tcp://10.100.124.207:1883";  
  13.      private static String userName = "tuyou";  
  14.      private static String passWord = "tuyou";  
  15.       
  16.   
  17.      private static MqttClient connect(String clientId) throws MqttException{  
  18.          MemoryPersistence persistence = new MemoryPersistence();  
  19.          MqttConnectOptions connOpts = new MqttConnectOptions();  
  20. //       String[] uris = {"tcp://10.100.124.206:1883","tcp://10.100.124.206:1883"};  
  21.          connOpts.setCleanSession(false);  
  22.          connOpts.setUserName(userName);  
  23.          connOpts.setPassword(passWord.toCharArray());  
  24.          connOpts.setConnectionTimeout(10);  
  25.          connOpts.setKeepAliveInterval(20);  
  26. //         connOpts.setServerURIs(uris);  
  27. //         connOpts.setWill(topic, "close".getBytes(), 2, true);  
  28.          MqttClient mqttClient = new MqttClient(broker, clientId, persistence);  
  29.          mqttClient.connect(connOpts);  
  30.          return mqttClient;  
  31.      }  
  32.        
  33.      public static void sub(MqttClient mqttClient,String topic) throws MqttException{  
  34.          int[] Qos  = {qos};  
  35.          String[] topics = {topic};  
  36.          mqttClient.subscribe(topics, Qos);  
  37.      }  
  38.        
  39.        
  40.     private static void runsub(String clientId, String topic) throws MqttException{  
  41.         MqttClient mqttClient = connect(clientId);  
  42.         if(mqttClient != null){  
  43.             sub(mqttClient,topic);  
  44.         }  
  45.     }  
  46.     public static void main(String[] args) throws MqttException{  
  47.           
  48.         runsub("client-id-1""$share/testgroupa/edge/server/private/+");  
  49.     }  
  50. }  

MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议

使用场景:

1、不可靠、网络带宽小的网络

2、运行的设备CPU、内存非常有限


特点:

1、基于发布/订阅模型的协议

2、他是二进制协议,二进制的特点就是紧凑、占用空间小。他的协议头只有2个字节

3、提供了三种消息可能性保障:最多一次 0、最少一次 1、只有一次 2

maven依赖

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.eclipse.paho</groupId>  
  3.     <artifactId>org.eclipse.paho.client.mqttv3</artifactId>  
  4.     <version>1.1.1</version>  
  5. </dependency>  

发送消息示例

[java]  view plain  copy
  1. import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;  
  2. import org.eclipse.paho.client.mqttv3.MqttCallback;  
  3. import org.eclipse.paho.client.mqttv3.MqttClient;  
  4. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  
  5. import org.eclipse.paho.client.mqttv3.MqttException;  
  6. import org.eclipse.paho.client.mqttv3.MqttMessage;  
  7. import org.eclipse.paho.client.mqttv3.MqttPersistenceException;  
  8. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;  
  9.   
  10. /** 
  11.  * 发送数据到mqtt服务器 
  12.  * @author:涂有 
  13.  * @date 2017年8月16日 下午11:15:22 
  14.  */  
  15. public class PubMsg {  
  16.     private static int qos = 2//只有一次  
  17.     private static String broker = "tcp://10.100.124.206:1883";  
  18.     private static String userName = "tuyou";  
  19.     private static String passWord = "tuyou";  
  20.   
  21.       
  22.     private static MqttClient connect(String clientId,String userName,  
  23.             String password) throws MqttException {  
  24.         MemoryPersistence persistence = new MemoryPersistence();  
  25.         MqttConnectOptions connOpts = new MqttConnectOptions();  
  26.         connOpts.setCleanSession(true);  
  27.         connOpts.setUserName(userName);  
  28.         connOpts.setPassword(password.toCharArray());  
  29.         connOpts.setConnectionTimeout(10);  
  30.         connOpts.setKeepAliveInterval(20);  
  31. //      String[] uris = {"tcp://10.100.124.206:1883","tcp://10.100.124.207:1883"};  
  32. //      connOpts.setServerURIs(uris);  //起到负载均衡和高可用的作用  
  33.         MqttClient mqttClient = new MqttClient(broker, clientId, persistence);  
  34.         mqttClient.setCallback(new PushCallback("test"));  
  35.         mqttClient.connect(connOpts);  
  36.         return mqttClient;  
  37.     }  
  38.   
  39.     private static void pub(MqttClient sampleClient, String msg,String topic)   
  40.             throws MqttPersistenceException, MqttException {  
  41.         MqttMessage message = new MqttMessage("ertwersdfas".getBytes());  
  42.         message.setQos(qos);  
  43.         message.setRetained(false);  
  44.         sampleClient.publish(topic, message);  
  45.     }  
  46.       
  47.     private static void publish(String str,String clientId,String topic) throws MqttException{  
  48.         MqttClient mqttClient = connect(clientId,userName,passWord);  
  49.   
  50.         if (mqttClient != null) {  
  51.             pub(mqttClient, str, topic);  
  52.             System.out.println("pub-->" + str);  
  53.         }  
  54.   
  55.         if (mqttClient != null) {  
  56.             mqttClient.disconnect();  
  57.         }  
  58.     }  
  59.   
  60.     public static void main(String[] args) throws MqttException {  
  61.         publish("message content","client-id-0","$share/edge/server/public/a");  
  62.     }  
  63. }  
  64.   
  65. class PushCallback implements MqttCallback {  
  66.     private String threadId;  
  67.     public PushCallback(String threadId){  
  68.         this.threadId = threadId;  
  69.     }  
  70.       
  71.     public void connectionLost(Throwable cause) {  
  72.           
  73.     }  
  74.   
  75.     public void deliveryComplete(IMqttDeliveryToken token) {  
  76. //       System.out.println("deliveryComplete---------" + token.isComplete());  
  77.     }  
  78.   
  79.     public void messageArrived(String topic, MqttMessage message) throws Exception {  
  80.         String msg = new String(message.getPayload());  
  81.         System.out.println(threadId + " " + msg);  
  82.     }  
  83. }  


消费消息示例

[java]  view plain  copy
  1. import org.eclipse.paho.client.mqttv3.MqttClient;  
  2. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  
  3. import org.eclipse.paho.client.mqttv3.MqttException;  
  4. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;  
  5.   
  6. public class SubMsg {  
  7.   
  8. //   private static String topic = "$share/testgroup/wyptest1";  
  9. //   private static String topic = "$queue/wyptest1";  
  10. //   private static String topic = "wyptest1";  
  11.      private static int qos = 2;  
  12.      private static String broker = "tcp://10.100.124.207:1883";  
  13.      private static String userName = "tuyou";  
  14.      private static String passWord = "tuyou";  
  15.       
  16.   
  17.      private static MqttClient connect(String clientId) throws MqttException{  
  18.          MemoryPersistence persistence = new MemoryPersistence();  
  19.          MqttConnectOptions connOpts = new MqttConnectOptions();  
  20. //       String[] uris = {"tcp://10.100.124.206:1883","tcp://10.100.124.206:1883"};  
  21.          connOpts.setCleanSession(false);  
  22.          connOpts.setUserName(userName);  
  23.          connOpts.setPassword(passWord.toCharArray());  
  24.          connOpts.setConnectionTimeout(10);  
  25.          connOpts.setKeepAliveInterval(20);  
  26. //         connOpts.setServerURIs(uris);  
  27. //         connOpts.setWill(topic, "close".getBytes(), 2, true);  
  28.          MqttClient mqttClient = new MqttClient(broker, clientId, persistence);  
  29.          mqttClient.connect(connOpts);  
  30.          return mqttClient;  
  31.      }  
  32.        
  33.      public static void sub(MqttClient mqttClient,String topic) throws MqttException{  
  34.          int[] Qos  = {qos};  
  35.          String[] topics = {topic};  
  36.          mqttClient.subscribe(topics, Qos);  
  37.      }  
  38.        
  39.        
  40.     private static void runsub(String clientId, String topic) throws MqttException{  
  41.         MqttClient mqttClient = connect(clientId);  
  42.         if(mqttClient != null){  
  43.             sub(mqttClient,topic);  
  44.         }  
  45.     }  
  46.     public static void main(String[] args) throws MqttException{  
  47.           
  48.         runsub("client-id-1""$share/testgroupa/edge/server/private/+");  
  49.     }  
  50. }  

猜你喜欢

转载自blog.csdn.net/wangshuminjava/article/details/80907596