rpc 是一種基於request/response 模式的分布式協議。而mqtt 是基於pub/sub模式的協議。是否能夠將這兩種協議相結合,實現rpc over mqtt ?我並沒有發現由比較知名的rpc over mqtt協議。於是,自己著手設計乙個極簡的rpc over mqtt 協議。
本文介紹modular-2 edge 中,使用mqtt 協議實現rpc 的方法。
在modular-2 edge 微服務架構中,提供了三種rpc 形式,它們分別是:
1 websocket rpc
2 mqtt rpc
3 html restfull rpc
mqtt 是基於topic 訂閱和發布的通訊方式。實現mqtt 協議的難點是設計乙個合適的topic 命名方式和語法。
對於乙個複雜系統,topic 命名更具有挑戰性。
在實現rpc over mqtt時,需要有乙個唯一的topic 來標識乙個rpc 呼叫和結構。它需要反映如下資訊
目標名稱
信源名稱
rpc方法 雖然在訊息體的json 描述中含有rpc 但是為了訂閱和發布的方便。在topic 中也需要包含了method 的名稱。
因此,我們設計的topic 格式為:
//其中
方法的名稱
通知為什麼要在topic 中包含目標和信源的名稱呢?
例項:
microservice1/gpio/register
數字io 寫(digitalout.write)
microservice1/gpio/digitaloutwrite
數字io翻轉(digitalout.flipflop)
microservice1/gpio/digitaloutflipflop
模擬量輸入
microservice1/vibration/analogread
modbus請求
microservice1/weather/modbusrequest
mqtt 的payload 採用了json 格式的rpc,例如
jsonrpc={
method:「microservice/digitalout.write";
mode:2;
params:{
value[1,0]
id:1
1 baseservice 訂閱
subscribe(「baseservice/#」)
當乙個websocket 的rpc 註冊時,要向mqtt broker 訂閱該rpc.例如:
subscribe(「microservice/+/digitalout.write);
subscribe(「」gpiomqtt/#」);
3 mqtt 命令出錯
訊息體是json 格式的出錯資訊。
在modular-2 微服務架構中,採用了最簡單的mqtt topic 設計,實現了rpc over mqtt 協議。並且和websocket rpc 相容。mqtt 的應用中,應該避免mqtt topic 的隨意性,將topic 減少到最簡單。是乙個好的方法。
MQTT協議 MQTT協議簡介
mqtt messagequeuing telemetry transport,訊息佇列遙測傳輸 是ibm開發的乙個即時通訊協議。mqtt是面向m2m和物聯網的連線協議,採用輕量級發布和訂閱訊息傳輸機制。它的設計思想是輕巧 開放 簡單 規範,因此易於實現。這些特點使得它對很多場景來說都是很好的選擇,...
MQTT協議 MQTT協議解析
協議就是通訊雙方的乙個約定,即,表示第1位傳輸的什麼 第2位傳輸的什麼 在mqtt協議中,乙個mqtt資料報由 固定頭 fixed header 可變頭 variable header 訊息體 payload 三部分構成。mqtt 資料報結構 固定頭存在於所有mqtt資料報中,其結構如下 bit76...
基於MQTT協議的安卓實現
最近在搞乙個專案用到訊息推送,在網上搜尋了一陣子後發現了ibm的兩個mqtt庫,分別為wmqtt.jar與mqttv3.jar。本文主要是對mqttva.jar庫的使用做以說明。一 用adt建立如下的工程 以上是我建立的工程,當然 有一部分也是來自網路,現在就還給網路,哈哈 二 安卓介面設計 可以設...