MQ 客戶端收發 MQTT 消息__Java 接入示例_MQTT 接入(物聯)_消息隊列 MQ-阿裏雲
MQ 除了提供標準的 MQTT 服務之外,還支持使用 MQ 客戶端來收發 MQTT 消息,實現 MQ 私有協議和 MQTT 協議之間的數據互通。這種方式一般用於 MQTT 移動端設備上傳的數據的後期處理,即在 ECS 上部署 MQ 的客戶端,分析處理 MQTT 上傳的數據。
MQ 消息和 MQTT 消息的對應關係如下圖所示:
使用 MQ 客戶端的相關說明,請參見 MQ TCP Java SDK 接入。
1. MQ 客戶端發送 MQTT 消息
本小節介紹如何使用 MQ 的 SDK 向 MQTT 設備發送消息。使用 MQ 客戶端向 MQTT 設備發消息的方式和普通 MQ 客戶端發消息沒有區別,隻是要根據需求,將 MQTT 的二級 Topic 設置到 MQ 的消息屬性中。
public class ONSSendMsg {
public static void main(String[] args) throws InterruptedException {
/**
* 設置阿裏雲的AccessKey,用於鑒權
*/
final String acessKey ="XXXXXX";
/**
* 設置阿裏雲的SecretKey,用於鑒權
*/
final String secretKey ="XXXXXXX";
/**
* 發消息使用的一級Topic,需要先在MQ控製台裏申請
*/
final String topic ="MQTTTestTopic";
/**
* ProducerID,需要先在MQ控製台裏申請
*/
final String producerId ="PID_MQTTTestTopic";
Properties properties =new Properties();
properties.put(PropertyKeyConst.ProducerId, producerId);
properties.put(PropertyKeyConst.AccessKey, acessKey);
properties.put(PropertyKeyConst.SecretKey, secretKey);
Producer producer = ONSFactory.createProducer(properties);
producer.start();
byte[] body=new byte[1024];
final Message msg = new Message(
topic,//MQ消息的Topic,需要事先申請
"TagTest",//MQ Tag,可以進行消息過濾
body);//消息體,和MQTT的body對應
/**
* 使用MQ客戶端給MQTT設備發送P2P消息時,需要在MQ消息中設置mqttSecondTopic屬性
* 設置的值是“/p2p/”+目標ClientID
*/
String targetClientID="GID_MQTTTestTopic@@@DeviceID_0001";
msg.putUserProperties("mqttSecondTopic", "/p2p/"+targetClientID);
//發送消息,隻要不拋異常就是成功。
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
/**
* 如果僅僅發送Pub/Sub消息,則隻需要設置實際MQTT訂閱的Topic即可,支持設置二級Topic
*/
msg.putUserProperties("mqttSecondTopic", "/notice/");
SendResult result =producer.send(msg);
producer.shutdown();
System.exit(0);
}
}
2. MQ 客戶端接收 MQTT 消息
本小節介紹如何使用 MQ 的 SDK 接收來自 MQTT 設備發送的消息。使用 MQ 客戶端接收 MQTT 設備的消息和普通 MQ 客戶端收消息沒有區別,MQ 客戶端隻需要訂閱 MQTT 的一級 Topic 即可。
public class ONSRecvMsg {
public static void main(String[] args) throws InterruptedException {
/**
* 設置阿裏雲的AccessKey,用於鑒權
*/
final String acessKey ="XXXXXX";
/**
* 設置阿裏雲的SecretKey,用於鑒權
*/
final String secretKey ="XXXXXXX";
/**
* 收消息使用的一級Topic,需要先在MQ控製台裏申請
*/
final String topic ="MQTTTestTopic";
/**
* ConsumerID ,需要先在MQ控製台裏申請
*/
final String consumerID ="GID_MQTTTestTopic";
Properties properties =new Properties();
properties.put(PropertyKeyConst.ConsumerId, consumerID);
properties.put(PropertyKeyConst.AccessKey, acessKey);
properties.put(PropertyKeyConst.SecretKey, secretKey);
Consumer consumer =ONSFactory.createConsumer(properties);
/**
* 此處MQ客戶端隻需要訂閱MQTT的一級Topic即可
*/
consumer.subscribe(topic, "*", new MessageListener() {
public Action consume(Message message, ConsumeContext consumeContext) {
System.out.println("recv msg:"+message);
return Action.CommitMessage;
}
});
consumer.start();
System.out.println("[Case Normal Consumer Init] Ok");
Thread.sleep(Integer.MAX_VALUE);
consumer.shutdown();
System.exit(0);
}
最後更新:2016-11-23 16:04:20
上一篇:
JavaScript 發消息示例__JavaScript 接入示例_MQTT 接入(物聯)_消息隊列 MQ-阿裏雲
下一篇:
MQTT 客戶端收發 MQTT 消息__Java 接入示例_MQTT 接入(物聯)_消息隊列 MQ-阿裏雲
雲服務器ECS監控__雲服務監控_用戶指南_雲監控-阿裏雲
Android 收發消息示例__Android 接入示例_MQTT 接入(物聯)_消息隊列 MQ-阿裏雲
批量修改解析記錄__批量管理接口_API文檔_雲解析-阿裏雲
售後支持服務條款__服務條款_售後支持計劃_支持計劃-阿裏雲
搜索指定發布信息__發布管理相關接口_Open API_消息隊列 MQ-阿裏雲
請求狀態__常用指標_使用手冊_性能測試-阿裏雲
SDK-Release__Spark_開發人員指南_E-MapReduce-阿裏雲
采集方式__loghub-采集_用戶指南_日誌服務-阿裏雲
解讀物聯網圈重磅成人禮!阿裏雲Link物聯網平台出擊“智聯網”!
雲解析(免費版)服務條款__服務條款_產品簡介_雲解析-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲