はじめに
-
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
よくてきていると思いました