onenet的mqtt伺服器地址
1. 如何在 JMeter 中使用 MQTT 插件
JMeter 內置 HTTP/HTTPS、TCP 等支持多種協議,還具備插件擴展機制。
MQTT 協議作為物聯網界的主流協議,雖然並非 JMeter 自帶的協議類型,但在物聯網測試場景中極為普遍。為了支持 MQTT 協議的規模測試,EMQ 映雲科技開發了基於 JMeter 的 MQTT 協議開源測試插件: https://github.com/xmeter-net/mqtt-jmeter 。
經過幾個版本的迭代,目前 JMeter MQTT 插件的最新版本為 2.0.2,支持連接、消息發布、消息訂閱等多種采樣器,並可通過組合構建更復雜的測試場景。
本文我們將具體介紹如何在 JMeter 中使用 MQTT 插件。
MQTT 插件的安裝方式與其他 JMeter 第三方插件類似。
連接采樣器模擬物聯網設備,發起 MQTT 連接。
Server name or IP: 指向被測 MQTT 伺服器地址。
Port number: 以 EMQ X 為例,默認 TCP 連接的埠是 1883, SSL 連接則是 8883。具體的埠請參照伺服器的具體配置。
MQTT version : 目前支持 MQTT 3.1及3.1.1版本。
Timeout: 連接超時設置,以秒為單位。
Protocols: 支持TCP、SSL、WS 和 WSS 方式連接 MQTT 伺服器。當選擇 SSL 或 WSS 加密通道連接時,可以選擇單向或者雙向認證(Dual)。如果希望進行雙向認證,還需要指定相應的客戶端證書(p12證書),以及對應的文件保護密碼(Secret)。
User authentication: 如果 MQTT 伺服器配置了用戶認證,需要提供相應的用戶名( User name )和密碼( Password )。
ClientId: 虛擬用戶的標識。如果勾選了「Add random suffix for ClientId」,將會在 ClientId 的基礎上給每個虛擬用戶再添加一個 uuid 串作為後綴,整個作為虛擬用戶標識。
Keep alive(s): 心跳信號發送間隔。例如,300 表示客戶端每隔 300 秒向伺服器發出 ping 請求,以保持連接活躍。
Connect attempt max: 第一次連接過程中,嘗試重連的最大次數。超過該次數則認為連接失敗。如果希望一直嘗試重連,可以設為 -1。
Reconnect attempt max: 後繼連接過程中,嘗試重連的最大次數。超過該次數則認為連接失敗。如果希望一直嘗試重連,可以設為 -1。
Clean session : 如果希望在連接之間保留會話狀態,可以將該選項設為 false。如果不希望在新的連接中保留會話狀態,則將該項設為true。
消息發布采樣器復用連接采樣器中建立的 MQTT 連接,向目標 MQTT 伺服器發布消息。
QoS Level: 服務質量,取值為 0,1,2,分別代表 MQTT 協議規范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精確一次(EXACTLY_ONCE)
Retained messages : 如果希望使用「保留消息」,可將該選項設為 true,MQTT 伺服器端將會存儲插件發布的保留消息及其 QoS,並在相應 topic 上發生訂閱時,直接將最後一條保留消息投遞給訂閱端,使得訂閱端不必等待即可獲取發布端的最新狀態值。
Topic name: 發布消息所屬的主題。
Add timestamp in payload: 如果勾選,發布的消息體開頭會附帶當前時間戳,配合消息訂閱采樣器的 Payload includes timestamp 選項,可以在消息接收端計算消息達到的延時。如果不勾選則只發送實際的消息體。
Payloads Message type: 目前支持三種消息類型
消息發布采樣器復用連接采樣器中建立的 MQTT 連接,從目標 MQTT 伺服器上訂閱消息。
QoS Level: 服務質量,含義與消息發布采樣器相同。
Topic name(s): 訂閱消息所屬的主題。支持單個消息訂閱采樣器訂閱多個主題,主題之間用逗號分隔。
Payload includes timestamp: 如果勾選,會從消息體開頭處解析發送時間戳,配合消息發布采樣器的 Add timestamp in payload 選項,可以用於計算消息的接收延時。如果不勾選則只解析實際的消息體。
Sample on : 采樣方式,默認為" specified elapsed time(ms) ",即每隔指定的毫秒時間采樣一次。也可以選擇" number of received messages ",即每接收到指定的消息數采樣一次。
Debug response: 如果勾選,消息內容會列印在 JMeter 的響應結果中。該選項主要用於調試目的,正式運行測試不建議勾選,以免影響測試效率。
斷開連接采樣器中建立的 MQTT 連接。
本文我們介紹了 JMeter MQTT 插件的各測試組件,在下期文章中我們將針對不同的測試場景詳細介紹如何用 MQTT 插件來構建測試腳本。
2. Android 中使用MQTT(第一篇)
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議。它是一種發布/訂閱,極其簡單和輕量級的消息傳遞協議,專為受限設備和低帶寬,高延遲或不可靠的網路而設計。它的設計思想是輕巧、開放、簡單、規范,易於實現。這些特點使得它對很多場景來說都是很好的選擇,特別是對於受限的環境如機器與機器的通信(M2M)以及物聯網環境。相對於XMPP,MQTT更加輕量級,並且佔用的寬頻低。
MQTT協議有以下特點:
那麼問題來了?重連連接成功後重復接收到最後一條消息
MQTT推送消息訂閱端重復接收問題。
(背景)訂閱端斷開的時候,發布端多次推送消息。
(現象)訂閱端啟動時,接收到最後一條推送消息有兩次;即使Qos設置為2;依然是兩次。
經排查是因為
MqttMessage的Retained設置為了true;
該值很多文章上只說了是 消息保留機制,若設置為true,mqtt伺服器會保留每次發布的消息;較少提到 若訂閱某主題的客戶端重啟,則會把此主題之前發布的消息重新推送到客戶端。該值默認為false;去掉修改該值即可
那麼問題來了?重連連接後手動那麼多遺漏的消息,怎麼選擇只接收最新的一條消息呢?
MQTT推送消息訂閱端重復接收問題。
(背景)訂閱端斷開的時候,發布端多次推送消息。
(現象)訂閱端啟動時,接收到msg1,msg2,msg3 (這三個消息都是同一個類型消息,只需要處理最新的msg3就好,不然界面會刷新三次)這個誰有什麼好辦法沒呢?
GitHub地址: https://github.com/eclipse/paho.mqtt.android
mqtt的官方文檔: http://mqtt.org/documentation
Github上有中文翻譯: https://github.com/mcxiaoke/mqtt
在mole的build.gradle文件中添加依賴
在 AndroidManifest.xml 添加限權
在 AndroidManifest.xml 注冊Service (MyMqttService為自己寫的服務,下文會講到)
3. Centos搭建mqtt
本文使用emqx搭建mqtt: 官方地址傳送門
1.查看openssl版本
一般情況,centos7版本為1.0.2,mqtt的框架emqx必須大於1.0.2,所以如果低於該版本請升級: centos升級openssl教程傳送門
2.安裝
3.查看防火牆
如果當前伺服器打開了防火牆,需要將防火牆相應埠進行配置。
4.進入etc/emqx目錄
5.修改配置文件emqx.conf
修改配置文件內容。
6.打開配置網頁
登錄網頁端後台: http://xx.xx.xx.xx:18083/
7.配置網頁打開插件emqx_auth_mnesia
網頁端->插件->emqx_auth_mnesia->啟動
8.配置mqtt用戶名和密碼
修改文件內容:
9.配置acl主題許可權
修改文件內容:
10.重新載入acl配置文件
11.重新啟動emqx
4. Android使用MQTT通訊
主要講下Android如何使用MQTT通訊。用到漏侍的軟體或者框架有:
EMQ: https://www.emqx.io/cn/
org.eclipse.paho的MQTT通訊框架: https://github.com/eclipse/paho.mqtt.android
如果已經有MQTT相關服務返尺吵,可以跳過第一項,從第二項開始看。
1.安裝所需要的依困吵賴包
2.使用以下命令設置穩定存儲庫,以 CentOS7 為例
3.安裝最新版本的 EMQ X
4.安裝特定版本的 EMQ X
5.啟動 EMQ X
地址:xxx.xxx.xxx:18083,地址為伺服器ip或者域名,埠為18083埠
1.在Android中導入依賴
項目地址: https://github.com/eclipse/paho.mqtt.android
2.創建MQTT連接的一個Service
5. 如何配置rabbitmqtt伺服器的ip地址
RabbitMQ Server安裝
################################################
1.安裝Erlang
sudo yum install erlang
2.安裝RabbitMQ Server
需要先導入key
sudo rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
可先將內容保存至文本文件,如,rabbitmq-signing-key-public.asc.txt
sudo rpm --import rabbitmq-signing-key-public.asc.txt
3.安裝rabbitmq-server-3.4.1-1.noarch.rpm
sudo yum install rabbitmq-server-3.4.1-1.noarch.rpm
4.啟動RabbitMQ Server
注冊為系統服務
sudo chkconfig rabbitmq-server on
啟動RabbitMQ Server
sudo /etc/init.d rabbitmq-server stop/start/etc
sudo service rabbitmq-server stop/start/etc
5.若啟動失敗檢測埠是否被佔用
4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)