天天看點

物聯網環境下的大吞吐量下消息服務叢集設計

1、基于ibm mq産品來實施jms技術的消息服務應用伺服器。

2、物聯網消息采用mqtt協定,websphere mq telemetry transport (mqtt) 是一項專為受限裝置和受限網絡設計的異步消息通信協定,以輕量、精簡、開放和易于實作為主要特點。

3、mqtt 規範是開放并且免版稅使用的,這有助于更好地推廣。提供開源的實作,在 http://eclipse.org/paho/上有各種用戶端的開源實作

4、釋出 - 訂閱的消息通信協定,允許一條消息隻釋出一次,便可被多個消費端(應用程式 / 裝置)所接收

5、提供多種消息服務品質,包括 mq 的黃金準則 -- 保證傳遞且僅有一次傳遞

0 :消息最多被傳遞一次

1 :消息會被傳遞但可能會重複傳遞

2 :消息保證傳遞且僅有一次傳遞

6、為受限的裝置所設計 :

預期用戶端應用程式 / 裝置有可能僅具備非常有限的處理能力和資源

占用空間極小的 mqtt 用戶端 ( 和伺服器 ) 類庫

7、易于使用(和實作)

簡單的動詞集合,包括 connect, publish, subscribe 和 disconnect

内建結構支援處理用戶端和伺服器之間的連接配接丢失

如果用戶端意外掉線,使用“遺願和遺囑”釋出一條消息

8、websphere mq telemetry 由 telemetry 服務和 telemetry 用戶端組成。其中 telemetry 服務作為 queue manager 的一部分,可作為 mqtt 連接配接的伺服器,telemetry 用戶端可用來測試 mqtt 連接配接的可用性。

9、在傳統的開放平台 websphere mq 應用架構中,每個隊列管理器都是獨立的。當一個 qm 給另一個 qm 發送消息時,需要定義一個傳輸隊列(transmission queue), 一個連接配接到目的端 qm 的通道,并且需要在發送消息的用戶端上定義遠端隊列定義(remote queue definition)。為了簡化 mq 系統配置,可以通過 mq 叢集的使用,減少隊列管理器上的對象數量,使得不同的 qm 可以互相通信而不需要定義衆多的傳輸隊列、通道以及遠端隊列定義。當叢集中含有一個以上的同一隊列執行個體時,websphere® mq 會根據負載均衡算法選擇最佳的隊列進行消息路由。

10、mq 叢集中的完全存儲倉庫存儲叢集中隊列管理器的中繼資料資訊,一個叢集不建議使用超過兩個完全存儲倉庫

11、完全存儲倉庫建議不做業務應用,具體業務應用使用不完全存儲倉庫

12、在 mq 叢集中使用 mqtt telemetry 服務時,隻需要在叢集中建立叢集主題(cluster topic),并且隻需要在叢集中的一個隊列管理器建立,不需要建立共享隊列,預設使用 system.mqtt.transmit.queue

13、使用 mq telemetry 不需要手動建立訂閱對象(subscriptions),mqxr 服務預設使用 client id :topic string 為名字自動建立訂閱對象

14、完整的mqtt協定規範pdf下載下傳:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt_v3.1_protocol_specific.pdf

15、 java -xms50m -xmx50m -djava.ext.dirs=/root/mq/lib -cp mqttperf.jar singletopicsub -b 9.119.154.235 -c 1000 -m 50000 -t testtopic -s 1 即一共建立了 1000 個訂閱者,無差錯情況下會接收到 50000 條消息。指令中參數 -xms 指程式的初始化記憶體大小,-xmx 指程式占用的最大記憶體,-djava.ext.dirs 指引用包路徑,該路徑檔案夾中應該包含有 org.eclipse.paho.client.mqttv3.jar。注意:其中 -m 參數主要用來标記所有用戶端應該收到的消息總數,其值為所有用戶端數與釋出程式釋出的消息數之乘積,用來和實際接收到的消息總數做比較,判斷所有消息是否被可靠傳輸。

作者:jaminwm

來源:51cto