IoT アプリケーションを作っていると、ローカルで MQTT 環境を使いたくなる時があります。

Mosquitto は、そんなオープンソースな MQTT のコントリビューションです。Windows や Mac 向けのバイナリも用意されているようですが、自分は Linux(ラズパイやCentOS) で使えると便利なので Linux 用の環境構築手順を紹介します。

まず、ラズパイだと話が早く、このコマンドを入力するだけで MQTT のブローカーが導入できてしまいます:
$ sudo apt-get install mosquitto

MQTT のパブリッシャーやサブスクライバーといったクライアントコマンドを使う場合は、更にコマンドを実行します:
$ sudo apt-get install mosquitto-clients


ブローカーは mosquitto というサービスとして導入されるので、service コマンドで他のサービス同様に扱うことができるようになります:
$ sudo service mosquitto status


一方、CentOS の場合は少し準備が必要です。インストールそのものは yum を使うので、まずは root でログインしてリポジトリを導入します:
# cd /etc/yum.repos.d
# wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-6/home:oojah:mqtt.repo

リポジトリが準備できたら yum でインストールします。これはブローカーのインストールコマンドです:
# yum install mosquitto

パブリッシャーやサブスクライバーなどのクライアントコマンドをインストールする場合はこちらのコマンドを(も)実行します:
# yum install mosquitto-clients

インストール後は、このコマンドでブローカーのサービスが起動します。ちなみに TCP と UDP の 1883 番ポートを空けておく必要があります:
# /usr/sbin/mosquitto

まあどちらも簡単でした。これでローカル環境に MQTT ブローカーの構築ができてしまいました。



最後に動作確認をしてみます(動作確認には MTQQ クライアントコマンドを導入した環境が必要です。MQTT ブローカーと同じマシンでも異なるマシンでも構いません)。

MQTT ブローカーが稼働している状況で、MQTT クライアントコマンドの使えるターミナル(やコマンドプロンプト)を2つ用意します。1つがパブリッシャー(サーバー)、もう1つがサブスクライバー(クライアント)となります。

まず1つのターミナル内で MQTT サブスクライバー(クライアント)を起動します。その際に -h オプションで MQTT ブローカーが稼働しているホストを、-t オプションでトピック文字列をそれぞれ指定します。起動後はプロンプトが戻らず、(Ctrl+C で終了するまで)待ち続けます:
# mosquitto_sub -h 192.168.0.XXX -t "top/ic001" -v

次にもう1つのターミナル内で MQTT パブリッシャー(サーバー)を起動します。起動時に -h オプションでサブスクライバーと同じ MQTT ブローカーホストを、-t オプションでサブスクライバーと同じトピック文字列をそれぞれ指定します。また -m オプションでメッセージ(この例では "Hello, World.")を指定します:
# mosquitto_pub -h 192.168.0.XXX -t "top/ic0t01" -m "Hello, World."
# mosquitto_pub -h 192.168.0.XXX -t "top/ic001" -m "Hello, World."

成功するとパブリッシャー側はすぐにコマンドプロンプトが戻って終了しますが、サブスクライバー側には送信されたメッセージが表示され、そのまま次のコマンドを待ち続けるはずです:
# mosquitto_sub -h 192.168.0.XXX -t "top/ic001" -v
top/ic001 Hello, World. ←パブリッシャーから送られたこれがサブスクライバー側に表示される

動作確認もできました。3台(ブローカー、サブスクライバー、パブリッシャー)の役割分担も分かりましたね。



(参考にしたサイト)
http://flyerback.blogspot.jp/2014/04/mqtt-broker-mosquitto-amaazon.html