前回構築したNode-REDのinputにMQTTブローカーにMQTT.jsで実装されたMoscaを使ってみます。スタンドアロンとExpressなどのアプリに組み込む形で動作します。Node-REDのコンテナと同様にMoscaもDockerコンテナを用意します。
Moscaのコンテナ
MQTTブローカーはmatteocollina/moscaイメージからコンテナを起動します。ポートはDockerホストにマップします。
$ docker pull matteocollina/mosca |
Node-REDの設定
前回構築したNode-REDのinputにMoscaのMQTTブローカーを設定します。左ペインのinputからmqttを選択し、中央ペインにドラッグ&ドロップします。
- Broker: 10.1.3.67:1883
- username: admin
- password: password
- topic: message
左ペインのoutputからdebugをドラッグ&ドロップしてmqttとdebugを線で結びます。
右上のデプロイボタンを押します。MQTTブローカーと接続に成功したので、mqttのnodeの下にconnectedと表示されます。
MQTTの通信テスト
publisherコンテナ
テスト用にNode.js用のコンテナを作ります。google/nodejs-runtimeからDockerイメージをビルドするためのプロジェクトを作成します。
$ mkdir -p ~/docker_apps/publisher |
package.jsonを用意します。
{ |
エントリーポイントのスクリプトを書きます。URLの書式は以下です。Node-REDで作成したmessage
topicにpublishします。
- URL: mqtt://{username}:{password}@{broker}:{broker_port}
var mqtt = require('mqtt') |
Dockerfileを作成して、docker build
を実行します。
$ echo FROM google/nodejs-runtime > Dockerfile |
publisherコンテナの起動
使い捨てのコンテナを起動して、1880ポートをDockerホストにマップします。
$ docker run --rm --name publisher publisher |
ブラウザで動作確認をします。outputのdebug nodeにブローカーが受信したメッセージが表示されます。
Moscaコンテナの標準出力にも受信したメッセージが表示されます。
{"name":"mosca","hostname":"dd8f320575e9","pid":1,"client":"mqtt_501a7060.afe59","level":30,"topic":"message","msg":"unsubscribed","time":"2015-02-08T12:53:54.576Z","v":0} |