阿里雲物聯網 .NET Core 客戶端 | CZGL.AliIoTClient:3. 訂閱Topic與響應Topic

CZGL.AliIoTClient 將 Topic 分爲五種

分別是:普通Topic、屬性上報、屬性下發、事件上報、服務調用,除了普通 Topic,每種 Topic 都有消息的發送、響應。

普通 Topic ,消息發送或,根據 MQTT 協議,SDK 嚴格保證消息能夠到達另一端。
設備推送屬性、事件等數據到服務器,則服務器要響應,
服務器推送(下發)數據到設備,則設備要響應。
當然,這些響應可有可無,無實質的影響。

每種、每個 Topic 都有特定的 MQTT 通訊地址,這些地址已經在 CZGL.AliIoTClient 中自動生成,你僅需填寫普通 Topic 的通訊地址即可。


1) 訂閱 Topic

訂閱 Topic 前,需要在阿里雲物聯網定義相應的 Topic 以及設置 訂閱 權限,
普通 Topic ,使用 string[] 包含列表,然後在調用連接方法時作爲參數傳入,亦可在連接服務器後,添加需要的訂閱。
普通 Topic 可以動態添加,屬於 熱訂閱 。

使用方法:

 // 設置要訂閱的Topic、運行接收內容的Topic
            string[] topics = new string[] { 
                                client.CombineHeadTopic("get"),
                                "/a1xrkGSkb5R/mire/user/get1" };

            client.ConnectIoT(topics,null,60);

Topic 地址比較長,你可以記錄 .../user/ 後的內容,使用 CombineHeadTopic() 可自動生成,

client.CombineHeadTopic("get") 

2)響應

當你使用屬性、事件、服務功能,對服務器進行數據傳輸時,服務器會做出響應,你可以選擇接收響應,也可以不接收響應。
CZGL.AliIoTClient 默認不接收服務器的響應信息。實際上這些響應信息一般只在調測時需要。

響應方法 說明
OpenEventPostReply() 接收上報事件後服務器的響應
OpenPropertyPostReply() 接收設備屬性上傳後服務器的響應
OpenServicePostRaw() 允許服務器調用服務 新版本已經取消這個設置
OpenPropertyDownPost() 允許服務器下發設置設備屬性指令

注意,這些響應,必須在連接客戶端前設置,並且在客戶端已經連接後,不能再使用以上方法,否則會彈出異常。
已修復,你可以在程序的任意階段打開接收功能,任意取消和打開。

查看這些功能是否打開:

public CZGL.AliIoTClient.OpenTopic getOpenTopic()

OpenTopic 具有 8 個屬性,用於獲取或設置是否打開某種功能的接收。

屬性 說明 默認值
CommonTopic 是否接收普通Topic 固定爲true,不能更改
PropertyUpRawReplyTopic 設備上傳透傳屬性數據後服務器的響應 false
PropertyPostReplyTopic 設備上傳Alink json屬性數據後服務器的響應 false
PropertyDownRaw 服務器下發設置屬性的命令,透傳 false
PropertyDownPost 服務器下發設置屬性的命令,Alink json false
EventUpRawReply 設備事件上報,接收服務器的響應,透傳 false
EventPostReply 設備事件上報,接收服務器的響應,Alink json false
ServiceDownRaw 服務器調用服務,透傳 false
ServicePostRaw 服務器調用服務,Alink json false

由於區分 透傳 和 Alink json,若是透傳,設置上面的 Alink json 項,是無效的,反之亦然。


3)連接服務器後


在連接服務器後,你還可以增加要訂閱的普通 Topic:

public void TopicAdd(string[] topics, [byte[] QOS = null])

示例:

client.TopicAdd(new string[]{ client.CombineHeadTopic("get") })

移除已經訂閱的 Topic:

public void TopicRemove(string[] topics)

在連接服務器後,可以取消接收服務器的響應信息,但是不能再重新接收。

方法 說明
CloseEventPostReply() 不再接收設備上傳事件後服務器的響應
ClosePropertyPostReply() 不再接收設備上傳屬性後服務器的響應
CloseServicePostRaw() 不允許服務器下發調用設備服務的指令已刪除此設置
ClosePropertyDownPost() 不允許服務器下發設置設備屬性的指令

你可以在客戶端連接服務器後,取消接收響應。但是,取消後,不能再訂閱!
已修復,你可以在程序任意階段取消後再打開接收。


4) Topic 說明

獲取已經訂閱的Topic列表:

public string[] GetSubedList { get; }

示例:

var topicList = client.GetSubedList;

服務器設置設備屬性、調用服務等功能,由於採用 MQTT 通訊,是訂閱/推送形式的,所以,無論什麼功能的數據傳輸,本質還是Topic。
因此,那些設備屬性上報、設置設備屬性等,可以配置 Topic 屬性。

CZGL.AliIoTClient 中,客戶端可以訂閱需要的 Topic,連接服務器後,服務器可以向所有 Topic 發送數據,但只有客戶端指定訂閱的 Topic,客戶端纔會接收到推送,不然無論在控制檯怎麼點擊發送,客戶端都是不會接收到的。

有個地方需要注意的是,對於普通Topic,是隨客戶端連接時的配置,決定服務器是否能夠推送消息到客戶端,動態的。

而屬性、事件、服務這些功能,會保存上一次的配置。當你打開

client.OpenPropertyPostReply();

接收屬性上傳到服務器的響應後,在程序刪除

client.OpenPropertyPostReply();

再次運行,依然會接收到響應,除非設置

client.ClosePropertyPostReply();

設備上傳數據到服務器,服務器會做出響應,當然,服務器設置設備屬性、調用設備服務時,客戶端也可以做出響應。將在後面的章節講述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章