現在、私たちはMQTTによって複数のデバイスを制御するアプリケーションを持っています。各デバイスは、デバイスIDの後に名前が付けられたユニークなトピックにサブスクライブします。たとえば、デバイスAはデバイスID 123を持っているため、トピック123を購読します。次に、アプリケーションがデバイスAに制御メッセージを公開したい場合は、デバイスAのデバイスIDである123という名前のトピックを公開します。Mosquitto MQTTの特定のクライアントにメッセージを公開する方法
これを行うことで、1000個のデバイスがあれば、1000個のトピックが作成されます。これは本当に悪いデザインです。したがって、ブローカに接続する各クライアントはクライアントIDを設定する必要があるため、トピックを受け取るクライアントIDを設定することによって、特定のクライアントにトピックを公開できると考えています。しかし、特定のクライアントに公開する方法はありませんでした。そして、MQTTはそのようなことを処理していないようです。同じトピックを購読しているクライアントにのみ公開します。
私たちが1つのトピックを達成するために行うことができる他の方法はありますか?それでも特定のクライアントにメッセージを発行することはできますか?
ありがとうございます!
「_これは本当に悪いデザインです」どうしてそう思うの?トピックは安いです。 1000トピックは1000xメモリをどこでも食べることはありません。 –
@PavelZdenek本当ですか?もっと多くのデバイスがあれば、多くのメモリが必要になると思ったので、私はそう考えていました。もちろん、1000は本当に小さい数字ですが、何百万以上の場合はどうなりますか?私は本当に確信していません。 –
1つのブローカに何百万ものデバイスを登録すると、確実に多くのメモリを消費します。しかし、トピックの特異性は記憶のほんの一部です。スケーラビリティは、不特定のトピックを使用するのではなく、ブローカのクラスタリング/ブリッジによって解決されます。このような大規模な操作を計画している場合は、クライアントのトピックの前にパーティションや「市外局番」を置くようにしてください。 –