物聯(lián)網(wǎng)環(huán)境下的大吞吐量下消息服務集群設計
1、基于IBM MQ產(chǎn)品來實施JMS技術的消息服務應用服務器。
2、物聯(lián)網(wǎng)消息采用MQTT協(xié)議,WebSphere MQ Telemetry Transport (MQTT) 是一項專為受限設備和受限網(wǎng)絡設計的異步消息通信協(xié)議,以輕量、精簡、開放和易于實現(xiàn)為主要特點。
3、MQTT 規(guī)范是開放并且免版稅使用的,這有助于更好地推廣。提供開源的實現(xiàn),在 http://eclipse.org/paho/上有各種客戶端的開源實現(xiàn)
4、發(fā)布 - 訂閱的消息通信協(xié)議,允許一條消息只發(fā)布一次,便可被多個消費端(應用程序 / 設備)所接收
5、提供多種消息服務質(zhì)量,包括 MQ 的黃金準則 -- 保證傳遞且僅有一次傳遞
0 :消息最多被傳遞一次
1 :消息會被傳遞但可能會重復傳遞
2 :消息保證傳遞且僅有一次傳遞
6、為受限的設備所設計 :
預期客戶端應用程序 / 設備有可能僅具備非常有限的處理能力和資源
占用空間極小的 MQTT 客戶端 ( 和服務器 ) 類庫
7、易于使用(和實現(xiàn))
簡單的動詞集合,包括 connect, publish, subscribe 和 disconnect
內(nèi)建結構支持處理客戶端和服務器之間的連接丟失
如果客戶端意外掉線,使用“遺愿和遺囑”發(fā)布一條消息
8、WebSphere MQ Telemetry 由 Telemetry 服務和 Telemetry 客戶端組成。其中 Telemetry 服務作為 Queue Manager 的一部分,可作為 MQTT 連接的服務器,Telemetry 客戶端可用來測試 MQTT 連接的可用性。
9、在傳統(tǒng)的開放平臺 WebSphere MQ 應用架構中,每個隊列管理器都是獨立的。當一個 QM 給另一個 QM 發(fā)送消息時,需要定義一個傳輸隊列(transmission queue), 一個連接到目的端 QM 的通道,并且需要在發(fā)送消息的客戶端上定義遠程隊列定義(remote queue definition)。為了簡化 MQ 系統(tǒng)配置,可以通過 MQ 集群的使用,減少隊列管理器上的對象數(shù)量,使得不同的 QM 可以互相通信而不需要定義眾多的傳輸隊列、通道以及遠程隊列定義。當集群中含有一個以上的同一隊列實例時,WebSphere® MQ 會根據(jù)負載均衡算法選擇***的隊列進行消息路由。
10、MQ 集群中的完全存儲倉庫存儲集群中隊列管理器的元數(shù)據(jù)信息,一個集群不建議使用超過兩個完全存儲倉庫
11、完全存儲倉庫建議不做業(yè)務應用,具體業(yè)務應用使用不完全存儲倉庫
12、在 MQ 集群中使用 MQTT Telemetry 服務時,只需要在集群中建立集群主題(Cluster Topic),并且只需要在集群中的一個隊列管理器創(chuàng)建,不需要創(chuàng)建共享隊列,默認使用 SYSTEM.MQTT.TRANSMIT.QUEUE
13、使用 MQ Telemetry 不需要手動創(chuàng)建訂閱對象(Subscriptions),MQXR 服務默認使用 client ID :topic string 為名字自動創(chuàng)建訂閱對象
14、完整的MQTT協(xié)議規(guī)范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 即一共創(chuàng)建了 1000 個訂閱者,無差錯情況下會接收到 50000 條消息。命令中參數(shù) -Xms 指程序的初始化內(nèi)存大小,-Xmx 指程序占用的***內(nèi)存,-Djava.ext.dirs 指引用包路徑,該路徑文件夾中應該包含有 org.eclipse.paho.client.mqttv3.jar。注意:其中 -m 參數(shù)主要用來標記所有客戶端應該收到的消息總數(shù),其值為所有客戶端數(shù)與發(fā)布程序發(fā)布的消息數(shù)之乘積,用來和實際接收到的消息總數(shù)做比較,判斷所有消息是否被可靠傳輸。