MQTT学習
なんとなく気になっていたので、JSONRPCをMQTT Broker経由して
Publish/Subribeできないかな、ってためのデモgemを書いた。
名前が地味である。
インストール
> gem install json_rpc_over_mqtt_example
Publish/Subcribeを試す
有名なMQTT Brokerであるmosquittoをインストールし、mosquitto_sub/mosquitto_pub 各コマンドを利用することにした。
Mac OS Xでのインストール/起動
homebrewで一発
> brew install mosquitto
> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mosquitto.plist
JSONRPCテスト用サーバの起動
> json_rpc_over_mqtt_server
Subscriberの起動
json_rpc_over_mqtt_serverでデフォルトで設定してあるclientというTOPICでメッセージ受信待ちをするために、mosquitto_subを使う
> mosquitto_sub -h localhost -t client
PublisherによるJSONRPC メッセージ送信によるメソッド実行
mosquitto_pubを使い、JSON形式のメッセージを流して、
JSONRPC Over MQTT Exampleで用意してあるメソッドを叩いてみる。
今回は時間を聞いてみることにした。
- Publisher
> mosquitto_pub -h localhost -t server -m '{"jsonrpc": "2.0", "id": 1000, "method": "what_time_is_it?"}'
- Subscriber(mosquitto_sub)
> {"jsonrpc":"2.0","id":1000,"result":"2014-12-31T10:03:25+09:00"}
- json_rpc_over_mqtt_server
> I, [2014-12-31T10:03:25.099352 #88576] INFO -- : TOPIC: server MESSAGE:{"jsonrpc": "2.0", "id": 1000, "method": "what_time_is_it?"}
うむ、うまく行っている。
やってみて
まあ、いいんじゃない?って思った。地味な感じ。
知り合いからJSONRPCがいいと思ってるんですよ、とか聞いてたり、
過去にJSONRPCをRedisのPub/Sub使ってサービスに実装してたな、とか思い出したのでMQTTの学習の一環として書いてみた。
MQTT Brokerの使い方の練習になってる感じだけど。
こういう記事もあるし。REST以外の手段は、と...
RESTの代替は必要か
RubyのMQTT client(ruby-mqtt)はQOS 0のみサポートという点と、
MQTT Brokerへの再接続はしないとのことだ。
他の言語によるMQTTライブラリを使うと、実行の信頼性の高いJSONRPC実行環境を作れるのかな。