はじめに
-
shiftr.ioっていうMQTTの通信の可視化してくれるサービス見つけたので使ってみた - 可視化されるのはブローカー・クライアント・トピックのトポロジ、メッセージのやりとり、およびメッセージの内容、通信量 など
shiftr.io
こんな感じで可視化されます
- ここは誰でも試せるサンドボックスのような環境(トピック)
-
shiftr.ioのトップページのTryっていうところから行ける - 凡例
- 真ん中の大きい丸がブローカー
- その周りの小さい白い丸がトピック。MQTTは
building/floor/roomのようにトピックを階層で表すことができるので、トピックの先にトピックがついて枝のようになっている - 点線でつながった丸がクライアント
- 動いてる黒い丸がメッセージ
クライアントを追加する
-
ruby-mqttを使ったクライアントmqtt.rbを動かしてみる - これ動かすと、
mySensorがでてきて通信を始める。このクライアントは同じトピックに対して[1]のところでsubscribeおよび[2]のところでpublishを行っているので、黒い丸が行って、帰ってくるように見える
mqtt.rb
require 'rubygems'
require 'mqtt'
broker = "mqtt://try:try@broker.shiftr.io"
client_name = "mySensor"
MQTT::Client.connect(broker, client_id: client_name) do |client|
client.subscribe '/example' # [1] topic_name to subscribe
loop do
client.publish 'example', 'hello' # [2] publish to topic_name, message
while !client.queue_empty? do
topic, message = client.get
puts "#{topic}: #{message}"
end
sleep 1
end
end
新しい Namespace を作る
-
DashboardからNew Namespaceを選んで、自分の Namespace(topic)をつくることができる - 作ったら、
Namespace Settingsからtokenをつくる- トークンは
74ge91e8:63ce1cf22a17765xみたいなフォーマット - これを
mqtt://74ge91e8:63ce1cf22a17765x@broker.shiftr.ioとして@より前につけると自分の Namespace へメッセージを送ったり、受けたりできる
- トークンは
クライアント増やして遊ぶ
トピック名 Tokyo に 3個の pub 10個の sub をぶら下げてみた
クライアントのコードはこちら
mqtt-3pub-10sub.rb
require 'rubygems'
require 'mqtt'
broker = "mqtt://<token>@broker.shiftr.io"
topic = "tokyo"
message = "hello world"
# Publisher
(101..103).each do |i|
Process.fork do
client_name = "sensor" + i.to_s
MQTT::Client.connect(broker, client_id: client_name) do |client|
loop do
client.publish topic, message
sleep 2
end
end
end
end
# Subscriber
(1..10).each do |i|
Process.fork do
client_name = "sensor" + i.to_s
MQTT::Client.connect(broker, client_id: client_name) do |client|
client.subscribe topic
loop do
while !client.queue_empty? do
topic, message = client.get
puts "#{client_name} #{topic} #{message}"
end
sleep 2
end
end
end
end
その他
クライアントの丸をクリックすると、通信量とか、メッセージ内容とかみることができます
まとめ
確かにセンサー類をシミュレーションする際には数が多いと訳がわからなくなるので、本番前にこういうのみながら構成をデザインして、事前にコード書いておくといいかもと思いました。shiftr.io よくてきていると思いました




