2016年5月23日 星期一

使用 Paho Client (in C & Java) 連接 MQTT Server

MQTT Server 是個 MOM(Message-oriented Middleware)。
Paho Project 是 MQTT Client implementation,拿來對 Server 收送資料。它有支援許多語言,包括: C/C++, Java, Python, .NET, Javascript。本篇測試 C/C++ embedded clients。
參考: https://www.eclipse.org/paho/

一、架設一個 MQTT Server (蚊子伺服器(mosquitto)) on CentOS


參考 https://breadfit.wordpress.com/2015/06/24/installing-mosquitto-under-centos/
Step 1: Add the CentOS 7 mosquitto repository
  1. $ cd /etc/yum.repos.d
  2. $ wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-7/home:oojah:mqtt.repo
  3. $ sudo yum update
Step 2: Install mosquitto & mosquitto-clients
  1. $ sudo yum install mosquitto
  2. $ sudo yum install mosquitto-clients
Step 3: Run mosquitto  (啟動 Mosquitto)
  1. $ sudo su
  2. # /usr/sbin/mosquitto -d -c /etc/mosquitto/mosquitto.conf > /var/log/mosquitto.log 2>&1
Step 4: Test mosquitto_sub & mosquitto_pub  (訂閱與傳送)
  1. $ mosquitto_sub -h [server_address] -t /[topic]
  2. $ mosquitto_pub -h [server_address] -t /[topic] -m “[message]”

以上 Step 3, Step 4 確認了 MQTT Server 確實可以運作。

二、測試 Paho Clients (in C/C++) 是否可以對這個 MQTT Server 送收資料。

透過 git 下載 Source 之後,裡面有三包: MQTTPacket, MQTTClient (C++), MQTTClient-C (C)。
裡面的 sample code 目錄都有 build shell script 可以執行 compile。
但寫此文時,MQTTClient(C++) Sample 在 CentOS上會 compile 失敗,已有人發出 Bug。
所以我只測了 MQTTClient-C 與 MQTTPacket 兩包。
MQTTClient-C 做 subscribe message ,程式不用改,原本就是個 general 的 sample。
MQTTPacket 做 publish message 。改一下 qos0pub.c 裡的 host,改一下 topic,然後重 build 就可以測了。

1. 啟動 Subscribe 接收端。
開一個 console,切到 MQTTClient-C sample/linux/ 目錄下執行
    ./stdoutsub [topic] --host 127.0.0.1


2. 執行 Publish 傳送 message
開一個 console,到 MQTTClient-C sample/linux/ 目錄下執行
    ./qos0pub
後面不用帶參數,要連的IP,要送到哪個 topic,message 是什麼都寫死在 qos0pub.c sample code 裡。


三、測試 Paho Clients (in Java) 是否可以對這個 MQTT Server 送收資料。
可以在 https://eclipse.org/paho/clients/java/ 下載 Source Code,或是在 https://repo.eclipse.org/content/repositories/paho-releases/ 下載包好的 jar library (目前版本 org.eclipse.paho.mqtt.utility-1.0.2.jar)。我是抓 jar 放到 build path。
Sample Code 在這,https://github.com/eclipse/paho.mqtt.java/tree/master/org.eclipse.paho.sample.mqttv3app/src/main/java/org/eclipse/paho/sample/mqttv3app
Sample.java 可以publish 也可以 subscribe,改一下裡面的 action 變數即可。




總之,驗證了 Paho Client 可以用來對 MQTT Server 送收 message。




沒有留言: