MQTT實戰(zhàn)篇(轉載)

前幾篇文章我們介紹了MQTT協(xié)議本身,雖然非常適合物聯(lián)網項目,但是在項目實施的時候有諸多不便:mosquitto等開源產品可擴展性不佳务冕、需要自己簽發(fā)X509證書书释、認證與授權不靈活翘贮、MQTT服務需要自己運維等。所以爆惧,在實施物聯(lián)網服務的時候狸页,應該采用云端的托管服務,以便聚焦物聯(lián)網業(yè)務扯再,而不是為了基礎架構和運維煩惱芍耘。
這次我們將通過百度開放云物聯(lián)網服務IoT來體驗一下云端的MQTT托管服務是一個什么樣的體驗。

背景

百度開放云物聯(lián)網(IoT)服務是一個全托管的云服務熄阻,幫助建立設備與云端之間安全可靠的雙向連接斋竞,以支撐各種類型的物聯(lián)網項目,而無需考慮服務的運維秃殉。
  使用物聯(lián)網服務提供如下好處:

  1. 從設備到云端以及從云端到設備可靠地進行大規(guī)模消息傳輸坝初。
  • 對設備認證與權限管理,并保證數(shù)據(jù)安全傳輸钾军。
  • 支持多種語言開發(fā)鳄袍,兼容主流硬件設備。
  • 與大數(shù)據(jù)服務無縫對接吏恭,以數(shù)據(jù)分析驅動業(yè)務進步畦木。

為了更好地支持設備與云端之間的互聯(lián)互通,百度開放云物聯(lián)網服務原生支持MQTT(Message Queuing Telemetry Transport)協(xié)議砸泛。MQTT是基于二進制消息的發(fā)布/訂閱編程模式的消息協(xié)議十籍,最早由IBM提出的,如今已經成為OASIS規(guī)范唇礁。與HTTP勾栗、CoAP、XMPP等協(xié)議相比盏筐,MQTT協(xié)議有以下的優(yōu)勢:

  • MQTT基于TCP围俘,在反控設備的時候比CoAP等基于UDP的協(xié)議更可靠,比如使用3G通訊的時候需要專門實現(xiàn)CoAP over TCP,否則反控很不穩(wěn)定界牡。
  • MQTT異步Pub/Sub實現(xiàn)簿寂,好比發(fā)個短信,無需等待對方確認便可以繼續(xù)宿亡,而不像HTTP常遂、CoAP那樣必須等待對方應答才能返回的同步模式。
  • MQTT為物聯(lián)網提供了許多體貼的設計挽荠,比如QoS克胳,比如“遺言”等設計。
  • MQTT是二進制格式圈匆,比XMPP更輕量級漠另。

總之,通過支持輕量級可擴展的MQTT跃赚,百度開放云物聯(lián)網服務非常適合需要低功耗和網絡帶寬有限的物聯(lián)網場景笆搓,國外的公有云供應商如AWS、Azure纬傲、Bluemix等都以各種形式加入了對MQTT的支持满败。
  使用物聯(lián)網服務的參考架構如下:


  為了保障安全,開放云物聯(lián)網服務的MQTT通訊都是通過SSL加密的嘹锁,確保消息不會被監(jiān)聽與篡改。

要使用百度物聯(lián)網服務着裹,請到這里申請測試领猾。目前提供的是基于命令行的用戶體驗,可以參考入門指南配置Python環(huán)境并下載命令行工具骇扇。

運維體驗

百度物聯(lián)網服務分為運維人員體驗和開發(fā)人員體驗兩部分摔竿。首先讓我們來看運維人員體驗。
  首先需要創(chuàng)建IoT實例少孝,以容納多個設備继低、身份、策略等資源:

bce.py iot create-endpoint --endpoint-name "smart-project"

在實例下面可以創(chuàng)建一或多個設備:

bce.py iot create-thing --endpoint-name "smart-project" --thing-name "sensor-100"

成功創(chuàng)建設備后稍走,系統(tǒng)返回username袁翁,是用來作為標識符與MQTT服務交互的。
  下面進行權限管理婿脸,保證設備能夠對特定的主題訂閱發(fā)布消息粱胜。
  首先需要創(chuàng)建一個或多個身份(Principal)來代表物聯(lián)網服務中的認證主體。對于物聯(lián)網服務狐树,權限綁定在身份而不是設備上的焙压,這樣用戶可以為每個設備創(chuàng)建不同的身份,或者設備共享一個身份,非常靈活:

bce.py iot create-principal --endpoint-name "smart-project" --principal-name "sensor-principle"

身份創(chuàng)建成功后涯曲,服務返回password野哭。這里需要說明一下,這邊的password其實是個密鑰幻件,只要能提供這個密鑰拨黔,系統(tǒng)便會賦予相應的身份。換句話說傲武,上面創(chuàng)建的sensor-100可以提供這個密鑰以獲得sensor-principle身份蓉驹,sensor-200如果能夠提供同樣的密鑰,系統(tǒng)也會把它辨識成同樣的身份揪利,擁有身份上面所對應的一切權限态兴。
  用以下命令把這個身份綁定在設備上:

bce.py iot attach-thing-principal --endpoint-name "smart-project" --thing-name "sensor-100" --principal-name "sensor-principle"

下面創(chuàng)建策略(Policy),以控制對消息主題的訂閱發(fā)布等操作權限疟位。比如瞻润,用于訂閱和發(fā)布某公司B樓第5層的溫度的主題,實現(xiàn)方式如下:

bce.py iot create-policy --endpoint-name "smart-project" --policy-name "b-5-temperature-policy" --topic="building-b/floor-5/temperature" --operation=PUBLISH --operation=SUBSCRIBE

創(chuàng)建策略成功后甜刻,便可以綁定到身份上绍撞,擁有這個身份的設備sensor-100便繼承了對主題的訂閱發(fā)布權限:

bce.py iot attach-principal-policy --endpoint-name "smart-project" --policy-name "b-5-temperature-policy" --principal-name "sensor-principle"

運維人員體驗至此結束,物聯(lián)網服務已經包含了一個設置好了訪問權限的設備得院。

開發(fā)體驗

下面我們看一下開發(fā)人員體驗傻铣。
  本質上開發(fā)人員只需要按照MQTT協(xié)議編程即可,具體的規(guī)范請參考http://mqtt.org/祥绞。實際上非洲,由于MQTT是物聯(lián)網的標準協(xié)議,有著豐富的客戶端支持蜕径,比如Eclipse基金會提供的Paho支持Windows/Unix/Mac/Android/RTOS上C/C++/Java/Python/JavaScript/.Net語言的開發(fā)两踏。
  這里我們就以NetBeans開發(fā)環(huán)境編寫Java應用為例。新建一個Java應用程序類型的Maven項目兜喻,右擊“依賴關系”選擇添加依賴關系梦染,查詢org.eclipse.paho,并加入對org.eclipse.paho.client.mqttv3的依賴朴皆,并在main函數(shù)中加入以下代碼:

String endpoint = "smart-project";
String username = "smart-project/sensor-100";
String password = "Dm3yyvOHb7zt/uRWadfasdfMc+uDbf4j960=";
String topic = "building-b/floor-5/temperature";
 
// 創(chuàng)建SSL連接
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init((KeyStore)null);
TrustManager[] trustManagers = tmf.getTrustManagers(); 
SSLContext ctx = SSLContext.getInstance("TLS");

ctx.init(null, trustManagers, null);
 
// 配置MQTT連接
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
options.setUserName(username);
options.setPassword(password.toCharArray());
options.setSocketFactory(ctx.getSocketFactory());
 
// 創(chuàng)建MQTT連接
MqttClient client = new MqttClient(endpoint, "java-client");
client.connect(options);
 
// 發(fā)送消息
MqttMessage message = new MqttMessage();
message.setPayload("15".getBytes());
client.publish(topic, message);
client.disconnect();

把以上代碼植入智能設備帕识,便可以輕松安全地向云端發(fā)送消息了。從云端向智能設備發(fā)送控制命令也很直觀遂铡,這里就不再贅述了渡冻。
  可以看見,采用云端的托管物聯(lián)網服務忧便,把基礎架構與運維交給云服務供應商族吻,使得物聯(lián)網項目實施高效便捷了許多帽借。百度開放云物聯(lián)網服務為物聯(lián)網而生,不但提供了全托管的MQTT服務超歌,在安全性與可擴展性方面也做下足了功夫砍艾,誠意十足。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末巍举,一起剝皮案震驚了整個濱河市脆荷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懊悯,老刑警劉巖蜓谋,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炭分,居然都是意外死亡桃焕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門捧毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來观堂,“玉大人,你說我怎么就攤上這事呀忧∈郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵而账,是天一觀的道長胰坟。 經常有香客問我,道長泞辐,這世上最難降的妖魔是什么笔横? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮铛碑,結果婚禮上狠裹,老公的妹妹穿的比我還像新娘虽界。我一直安慰自己汽烦,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布莉御。 她就那樣靜靜地躺著撇吞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礁叔。 梳的紋絲不亂的頭發(fā)上牍颈,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天那婉,我揣著相機與錄音哲鸳,去河邊找鬼构回。 笑死,一個胖子當著我的面吹牛猫妙,可吹牛的內容都是我干的。 我是一名探鬼主播盛卡,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼系任,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了步氏?” 一聲冷哼從身側響起响禽,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荚醒,沒想到半個月后芋类,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡界阁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年侯繁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺董。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巫击,死狀恐怖,靈堂內的尸體忽然破棺而出精续,到底是詐尸還是另有隱情坝锰,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布重付,位于F島的核電站顷级,受9級特大地震影響,放射性物質發(fā)生泄漏确垫。R本人自食惡果不足惜弓颈,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望删掀。 院中可真熱鬧翔冀,春花似錦、人聲如沸披泪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽款票。三九已至控硼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艾少,已是汗流浹背卡乾。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缚够,地道東北人幔妨。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓鹦赎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親误堡。 傳聞我的和親對象是個殘疾皇子钙姊,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容