調(diào)試用的工具下載地址:
阿里云服務(wù)
??????許多人對云服務(wù)一知半解呐舔,以為知道個ECS/云主機遭铺,就是云服務(wù)的全部了鸣皂。其實瞻坝,云服務(wù)有許多內(nèi)容,消息中間件服務(wù)也是其中一種粹断。
????? 消息隊列在實際應(yīng)用中常用的使用場景符欠。異步處理,應(yīng)用解耦瓶埋,流量削鋒和消息通訊四個場景,具體內(nèi)容園中相關(guān)文章不少希柿,筆者不再此獻丑了呵。
????? 本文主要對阿里云提供的MQTT服務(wù)進行具體實戰(zhàn)配置應(yīng)用進行說明养筒。
MQTT簡介
?MQTT是基于二進制消息的發(fā)布/訂閱編程模式的消息協(xié)議曾撤,最早由IBM提出的,如今已經(jīng)成為OASIS規(guī)范晕粪。由于規(guī)范很簡單挤悉,非常適合需要低功耗和網(wǎng)絡(luò)帶寬有限的IoT場景,比如:
遙感數(shù)據(jù)
汽車
智能家居
智慧城市
醫(yī)療醫(yī)護
?由于物聯(lián)網(wǎng)的環(huán)境是非常特別的巫湘,所以MQTT遵循以下設(shè)計原則:
精簡尖啡,不添加可有可無的功能。
發(fā)布/訂閱(Pub/Sub)模式剩膘,方便消息在傳感器之間傳遞。
允許用戶動態(tài)創(chuàng)建主題盆顾,零運維成本怠褐。
把傳輸量降到最低以提高傳輸效率。
把低帶寬您宪、高延遲奈懒、不穩(wěn)定的網(wǎng)絡(luò)等因素考慮在內(nèi)。
支持連續(xù)的會話控制宪巨。
理解客戶端計算能力可能很低磷杏。
提供服務(wù)質(zhì)量管理。
假設(shè)數(shù)據(jù)不可知捏卓,不強求傳輸數(shù)據(jù)的類型與格式极祸,保持靈活性。
運用MQTT協(xié)議,設(shè)備可以很方便地連接到物聯(lián)網(wǎng)云服務(wù)遥金,管理設(shè)備并處理數(shù)據(jù)浴捆,最后應(yīng)用到各種業(yè)務(wù)場景,如下圖所示:
.登錄阿里云
首先稿械,我們打開阿里云选泻。
右上角,登錄
支持多種方式登錄
可用阿里系旗下的淘寶美莫、支付寶页眯、釘釘?shù)葞ぬ柕卿浂鵁o需注冊呵,真是方便啊
不過當(dāng)中厢呵,還夾了一個微博登錄窝撵,不知是什么個情況,本人不用這個述吸,不管也罷忿族。
選擇淘寶登錄
消息隊列MQ
咦,不是要說MQTT嗎蝌矛?怎么扯到MQ消息隊列了呢道批?這是因為阿里云的MQTT服務(wù)自身沒有持久化功能,需要依托MQ服務(wù)的持久化入撒,所以我們需要先開通MQ服務(wù)隆豹。
登錄阿里云后,找到管理控制臺茅逮,在如下位置璃赡,找到MQ相關(guān)服務(wù)
阿里云中的產(chǎn)品太多,筆者摸索了半天才找到的呵献雅。
開通RocketMQ服務(wù)
選擇消息隊列MQ
單擊消息隊列 RocketMQ進入消息隊列 RocketMQ 的產(chǎn)品主頁碉考。
在消息隊列 RocketMQ 的產(chǎn)品主頁上,單擊立即開通進入消息隊列 RocketMQ 服務(wù)開通頁面挺身,根據(jù)提示完成開通服務(wù)侯谁。
注:開通服務(wù)不收費!U录亍墙贱!
創(chuàng)建資源
資源類型說明
一個新的應(yīng)用接入消息隊列 RocketMQ 需要先創(chuàng)建相關(guān)的消息隊列 RocketMQ 資源,包括:
實例:用于消息隊列 RocketMQ 服務(wù)的虛擬機資源贱傀,會存儲消息主題(Topic)和客戶端 ID(Group ID)信息惨撇。
消息主題(Topic):在消息隊列 RocketMQ 的消息系統(tǒng)中,消息生產(chǎn)者將消息發(fā)送到某個指定的 Topic 府寒,而消息消費者則通過訂閱該指定的 Topic 來獲取和消費消息魁衙。
Group ID:用于消息消費者(或生產(chǎn)者)的標識
阿里云 AccessKey:用于收發(fā)消息時進行賬戶鑒權(quán)
MQ服務(wù)管理界面如下
微消息隊列MQTT
在阿里云中报腔,MQTT被稱為微消息隊列,大家入鄉(xiāng)為俗吧纺棺。
點擊 消息隊列 RocketMQ 榄笙,出現(xiàn)下拉列表
哦,原來MQTT服務(wù)你躲在這里暗或颉(產(chǎn)品中直接搜索MQTT是找不到的哦)
各位同學(xué)茅撞,看到的界面可能與我有所不同,可能在看到上述界面之間巨朦,未開通相關(guān)服務(wù)的同學(xué)米丘,可能會看到一個開通相關(guān)服務(wù)的界面,點擊開通就行了呵糊啡。(已開通的話拄查,相關(guān)界面是不會再顯示的呵)
僅開通服務(wù),不創(chuàng)建相關(guān)資源棚蓄,是不會收費的呵堕扶。
創(chuàng)建MQTT實例
創(chuàng)建MQTT實例
很多同學(xué)可能看到這里就準備要走人了呵,別急梭依,往下看
我們選擇最右側(cè)的按量付費套餐稍算。
該收費方式按使用收費!R鬯糊探!
除了頂級Topic是按每天每條2元錢收取資源占用費,其余的內(nèi)容河闰,按實際使用量收費科平。
如測試階段,頂級Topic可以使用時創(chuàng)建姜性,用完刪除瞪慧,僅收費使用日的資源占用費。
我們繼續(xù)部念。
購買后弃酌,系統(tǒng)自動生成一個MQTT服務(wù)實例
系統(tǒng)顯示我們已成功創(chuàng)建了一個實例
同時,系統(tǒng)給出了第二步的向?qū)В?/p>
消息存儲配置
阿里云中的MQTT服務(wù)沒有提供存儲功能印机,需要一個MQ服務(wù)來提供支持。
控制臺給出的選項中门驾,Kafka和AMQP目前均不可用
只有RocketMQ可選射赛。
好吧,這也算是選擇的話(我有得選嗎奶是?)
我們選擇新建共享實例楣责,我們以共享單車應(yīng)用為例竣灌,取一個 bike 的實例名
確認,系統(tǒng)生成RocketMQ實例
系統(tǒng)完成MQTT實例的配置秆麸,并給出了公網(wǎng)接入點地址初嘹。
創(chuàng)建Topic
阿里云的MQTT主題訂閱要求必需創(chuàng)建一個頂級的主題資源,這點可能與一些自行搭建的MQTT Broker有所區(qū)別沮趣,筆者分析可能是出于管理的需要屯烦。
?我們創(chuàng)建一個項級Topic
我們選擇普通消息,其他的消息類型房铭,大家可自行查看相應(yīng)的說明驻龟。
創(chuàng)建組ID
組ID也是阿里云MQTT通訊中的一定規(guī)定,ClientID需要使用組ID為前綴缸匪。
RAM資源訪問控制
在服務(wù)創(chuàng)建過程中翁狐,阿里云系統(tǒng)會提示我們需要配置RAM管理
RAM應(yīng)是資源訪問管理的意思,大家可以自行查閱凌蔬。
創(chuàng)建用戶
我們創(chuàng)建一個名為bike的用戶
點擊確定露懒,系統(tǒng)提示需要手機驗證,我們獲取驗證碼后填入并確定(如不需要該用戶具有管理功能砂心,只選擇編程訪問懈词,僅用于程序訪問,可無需短信驗證)
系統(tǒng)生成用戶信息计贰,生成了用戶名和密碼
大家切記钦睡,一定要點制復(fù)制,將用戶信息進行妥善保存躁倒,否則荞怒,你會發(fā)現(xiàn),前面一頓操作猛如虎秧秉,沒有AccessKeySecret白瞎杵褐桌。
一旦關(guān)閉此頁面,AccessKeySecret是無法再找回的象迎。
不過荧嵌,系統(tǒng)中雖然不能查看AccessKeySecret,但是還是允許為用戶創(chuàng)建新的AccessKey和AccessKeySecret砾淌,萬一AccessKeySecret丟失啦撮,只有新創(chuàng)建了。
授權(quán)
創(chuàng)建用戶后汪厨,需要對用戶進行授權(quán)
?對用戶添加權(quán)限
?我們授與創(chuàng)建用戶的MQ訪問權(quán)限
#玩轉(zhuǎn)MQTT-阿里云之MQTT使用(下)
摘要
?????? 為使物聯(lián)網(wǎng)項目在正式使用時赃春,能順利切換到具有高并發(fā)高負載能力的服務(wù)平臺,對阿里云提供的MQTT服務(wù)進行使用驗證劫乱。
引言
之前寫“MQTT之阿里云使用-玩轉(zhuǎn)阿里云”這篇文章時织中,由于時間關(guān)系(因水平問題锥涕,本人寫文章通長耗時較長),打算將內(nèi)容拆分為兩部分狭吼,將寫好的一部分先發(fā)了出去层坠,打算稍后再補充后續(xù)完結(jié)內(nèi)容。
?????? 不成想刁笙,文章發(fā)出后破花,居然被管理員從首頁移除,嚴重打擊了本人原本不那么強悍的內(nèi)心采盒,導(dǎo)致一直不太有興趣完成后續(xù)部分旧乞。
??????近來翻看自己的文章,發(fā)表這篇爛尾的文章居然是自己文章中閱讀訪問量最高的一篇磅氨。雖然文章內(nèi)容組織比較凌亂尺栖,表述也不夠好,在這9102年即將過去之際烦租,還是打算來一個續(xù)篇延赌,為自己忙忙碌碌(碌碌無為)的2019做個收尾。
MQTT服務(wù)驗證
?????? 書接上回叉橱,我們說到了阿里云RocketMQ挫以、MQTT服務(wù)的開通(MQTT消息的持久化依托MQ服務(wù))、介紹了MQ窃祝、MQTT實例的創(chuàng)建掐松,頂級Topic資源的創(chuàng)建,GroupID前綴的創(chuàng)建以及RAM帳號資源的創(chuàng)建及帳號授權(quán)粪小。
?????? 一系列準備工作之后大磺,準備開始使用MQTT消息中間件服務(wù)。
訪問鑒權(quán)
?????? 使用微消息隊列 MQTT 的客戶端收發(fā)消息時探膊,服務(wù)端會根據(jù) MQTT 客戶端設(shè)置的 Username 和 Password 參數(shù)來進行鑒權(quán)杠愧。
?????? 阿里云支持兩種鑒權(quán)模式
?????? 簽名驗證:永久授權(quán),適用于客戶端安全受信任的場景
?????? 臨時 Token 權(quán)限驗證:臨時授權(quán)逞壁,適用于客戶端不安全的場景
具體鑒權(quán)認證的相關(guān)資料在這里流济,大家可自行訪問閱讀。https://help.aliyun.com/document_detail/54225.html
簽名校驗
??????簡單介紹一下阿里云MQTT訪問中的簽名鑒權(quán)模式下的訪問要點
??????1腌闯、 MQTT連接參數(shù)中ClientId必須以GroupID為前綴绳瘟,以@@@作為連接符,連接自定義的客戶ID
??????2姿骏、 MQTT連接參數(shù)中Username由鑒權(quán)模式名稱糖声、AccessKey、InstanceId 三部分組成,以 “|” 分隔姨丈。
??????3、 MQTT連接參數(shù)中Password是用AccessKey對應(yīng)的AccessKeySecret對ClientId使用
HMAC-SHA1 方法進行簽名計算得到一個二進制數(shù)組擅腰,再對該二進制數(shù)組做 Base64 編碼得到最終的 Password 簽名字符串蟋恬。
簽名校驗資料網(wǎng)址如下:https://help.aliyun.com/document_detail/48271.html
??????阿里云MQTT服務(wù)管理頁面中,提供了一個在線的JS版本的簽名校驗驗證計算頁面趁冈,用于驗證各位自行實現(xiàn)的校驗算法是否正確歼争。
MQTT連接測試
讓我們調(diào)出Paho神器,來一場說連就連的測試
https://www.eclipse.org/paho/downloads.php
??????如上圖渗勘,先創(chuàng)建MQTT連接沐绒,填入服務(wù)器地址及端口,填入客戶機標識(ClientId)
??????在MQTT連接選項中旺坠,勾選開啟登錄乔遮,填寫用戶名、密碼
??????點擊連接取刃,正常情況下蹋肮,即可成功連接并登錄到阿里云MQTT服務(wù)器。
??????筆者基于C#,使用開源MQTTnet的Nuget包璧疗,也實現(xiàn)了一個簡單的MQTT客戶端坯辩。我們用這個客戶端進行連接測試,效果如下圖崩侠。
消息消費
??????MQTT是基于二進制消息的發(fā)布/訂閱編程模式的消息協(xié)議漆魔。
??????要使用MQTT進行通訊,就需要有發(fā)布者和消費者却音。發(fā)布者通過發(fā)布主題消息傳遞信息改抡,接收者通過訂閱對應(yīng)的主題接收和消費信息。
訂閱主題
??????MQTT客戶端與MQTT服務(wù)器建立連接之后僧家,我們即可以進行消息訂閱和消息發(fā)布雀摘。
發(fā)布主題
??????我們使用上文中建立的頂級主題創(chuàng)建一個帶有通配符的訂閱主題。
??????注意八拱,MQTT允許使用通配符訂閱主題阵赠,但是并不允許使用通配符廣播。
?????? 我們創(chuàng)建一個頂級主題下帶有城市和發(fā)布者編號的主題肌稻,發(fā)布一條消息清蚀,Payload中攜帶一個json格式的狀態(tài)信息和坐標信息。
?????? 點擊發(fā)布爹谭,可以看到上圖中枷邪,接收框中,成功接收到訂閱主題下的消息诺凡。(操作中發(fā)布了二條消息)东揣。
?????? 使用Paho測試消息發(fā)布/訂閱践惑,效果相同。
?????? 一個發(fā)布者發(fā)布的消息嘶卧,可以被多個訂閱者接收尔觉。
?????? 至此,阿里云MQTT服務(wù)使用介紹完畢芥吟。
一侦铜、前期準備。
1.關(guān)于MQTT連接的屬性:https://www.cnblogs.com/mhtc/p/11112153.html
2.關(guān)于阿里云配置工具的使用:https://www.cnblogs.com/mhtc/p/11130809.html
3.關(guān)于阿里云物聯(lián)平臺MQTT服務(wù)的一些屬性钟鸵。
4.MQTT.fx客戶端钉稍,請百度后官網(wǎng)下載。
二棺耍、實際操作汪茧。
1.生成連接參數(shù)舒帮。這里不做介紹肋僧,請參考https://www.cnblogs.com/mhtc/p/11130809.html
2.打開MQTT.fx新建一個客戶端来候。
3.將上次生成的信息做如下拷貝粘貼。
4.設(shè)置一般參數(shù)左敌。
這里都滿足平臺的要求瘾蛋, 沒有做更改。
5.填入用戶名和密碼矫限。
6.如果采用的是TCP直連哺哼,到這里就結(jié)束了。如果采用TLS加密傳輸叼风,需要設(shè)置以下取董。
這個連接沒有采用加密傳輸,沒有設(shè)置這個步驟无宿。
7.保存配置退出客戶端配置界面茵汰。連接服務(wù)器。
綠點表示連接成功孽鸡。
登陸物聯(lián)網(wǎng)管理平臺看一下蹂午。設(shè)備在線。
8. 發(fā)布一條消息彬碱。
這個是官方提供的基礎(chǔ)的主題豆胸, 可自定義主題
客戶端發(fā)布消息
平臺端收到消息。發(fā)布的消息只能選擇QoS0, QoS1, 其他的服務(wù)器不支持.
日志:
消息內(nèi)容:
9.訂閱一個主題巷疼。訂閱主題沒有測試晚胡。留待以后增加。
三、用一個客戶端連接云平臺的意義估盘。
1. 驗證連接參數(shù)的配置是否正確瓷患。
2.快速體驗MQTT連接,不用寫代碼編譯遣妥。
3.可以測試阿里云更深一步的內(nèi)容尉尾,物模型,數(shù)據(jù)的周轉(zhuǎn)傳輸?shù)取?/p>
配置圖片