2017-02-06 10 views
1

これはMQTTのトピックに関する複合的な問題です。3つのデータ・ポイントを公開するためのMQTTトピックの階層

Sensed Dataを "_data"、Signal Strengthを "_rssi"、データ収集時間を "_toc"とした複数のMQTTクライアント(センサーノード)が3つのトピックに公開しています。

/ノード/ NODE_ID /データ/
/ノード/ NODE_ID/RSSI/
/ノード/ NODE_ID/TOC "NODE_IDは" の識別子(整数/数字)である/

クライアント(ノード)(ノードに固有の)。 各ペイロード_data(浮動小数点データ)、_rssi(浮動小数点)と_toc(Unixの日時)です。明らかに、3つのデータポイントはすべて互いに関連しています。

この設計は、購読が許可されているトピックに基づいて、さまざまな購読者にアクセス制御を維持するのに役立ちます。

ノード/クライアントごとに3つの異なるトピックを使用することで大きな問題が1つあります。 - 「データ」ペイロードを発行した直後にMQTTクライアントとサーバーの接続が切断された(失われた) 「データ」トピックからのメッセージは新しい値を反映する一方、他の2つのトピックは古い値〜完全性の喪失を保持することになる。

私は

/ノード/ NODE_ID /データ/ _data/RSSI/_rssi/TOC/_toc

それとも

/ノードのようにワンライナーのトピックを使用することができます/ node_id /(_ data、_rssi、_toc)

_data、_rssi、_tocをそれを解析して値を分離します。最後のトピックスタイルは、特に、クライアントが公開する回数を減らし、データコストと整合性のエラーを削減します。長さも短いです。しかし、もちろん、これは本質的には非常に特別であり、エラーは容易に飛び込むことができます。

誰かが常にデータの整合性を保ち、クライアントの公開回数きれいなメッセージ構造を維持する。私は間違いなくデータの完全性を持つことを好むだろうが、加入者間のアクセス権を分離したいと思うだろう。

+1

特定のサブスクライバはサブセットのみを見ることができます(例えば_data、_rssi、_toc、_tss、_toc、および_tocと3つのすべて)。あなたのセンサーノードがあなたのアクセスコントロールを担当することは望ましくないようです。設計の観点からは、1人の加入者だけが生の測定値に完全にアクセスできるようにし、そのデータを分割し、アクセス権に従ってサブセットを再公開します。 –

+0

@GambitSupportはい、非常にそうです。実際のネットワークアーキテクチャは複雑で、多くのコンポーネントが有効です。再出版は素晴らしい解決策のように見えます。完全性、アクセス制御、低データ伝送コストの3つのアーキテクチャの問題すべてを解決します。私を逃れた驚くほど簡単な解決策。ありがとう! – solyarist

答えて

3

データをトピックにエンコードしないと、本当に面倒な結果になります。そして、本当に面倒なワイルドカード購読を使用して作業する必要があります。

実際に密接に関連付ける必要があるデータは、ペイロードに3つの値すべてを含む単一のメッセージを公開することです。つまり、個々のコンポーネントへのアクセスを分離することはできませんが、唯一の方法です。

+0

あなたは明らかに物事を見てきました。 OPがトピックの中でデータをエンコーディングしているということは、私の心にも及んでいませんでした。... –

+0

もちろん、私はトピックにデータを入れません。 @gambitによって提供されるソリューションを使用するには、すべてのデータをペイロードとして1つのトピックに入れ、それをさらに解析します。お返事をありがとうございます。 – solyarist

関連する問題