MQTTブローカーに Mosquitto を使用しています。
公開されているすべてのトピックをリクエストできるかどうか疑問に思いました。
したがって、すべてにサブスクライブすることによってではなく、つまり#
。
編集:私は利用可能なすべてのトピックを購読したくありません。公開されているすべてのトピックを取得する方法を探しています。ブローカーは、たとえば、公開されたすべてのトピックを含む文字列配列で応答できます。
MQTTブローカーの管理性は、現時点では非常に未成熟です。また、ブローカーから公開されたトピックのリストを取得する方法もわかりません。しかし、標準化の取り組みがあります。 $ SYSトピックツリーを使用 https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics 。
他のブローカーは、SNMPを介して管理できます。 MessageSight https://www.ibm.com/support/knowledgecenter/en/SSCGGQ_1.2.0/com.ibm.ism.doc/Monitoring/admin00008_.html 。 WEBインターフェイスにトピックを一覧表示できますが、プログラムでトピックを取得する方法がわかりません。
「EVERY」メッセージをretainmessage = Trueでブローカーに送信すると、次のことができます。
回避策、完全ではありませんが、場合によってはそれでも問題ありません。
すべてのトピックにサブスクライブされた、デバッグモードで実行可能なmosquitto_subクライアントを使用します。 1時間または十分と思われる情報を収集し、出力を解析してトピックを抽出します。
例:これらの人 http://www.mqtt-dashboard.com/ 活発なパブリックmqttサーバーがありますが、他の人がデータを送信するトピックについても示されていません(そして私はテストしたかったのはプロトコルの一部をサブスクライブします。公開するデータはありません)。出発点として、私はネット上の参照で彼らのトピックが「test /」で始まることを発見しました。
これを実行する:
./mosquitto_sub -h broker.hivemq.com -t test/# -d
おそらくすべてではありませんが(丸一日開いたとしても)、たくさんのライブトピックを見ることができました。
簡単な答えはノーです。ブローカーは、メッセージが公開されたトピックのリストを保持する必要はありません。メッセージが到着したときに、各クライアントがサブスクライブしているトピックのリストをチェックするだけです。
また、そのようなリストを保持している場合、リストからトピックを削除するタイミングをどのように決定しますか。メッセージはその特定のトピックに一度だけ送信される可能性があります。そのトピックをリストに永久に保持しますか?