148
阿裏雲
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-阿裏雲