2017-02-06 2 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 (유닉스 날짜)이다. 분명히 세 가지 데이터 요소는 모두 서로 관련되어 있습니다.

이 디자인은 구독 권한이있는 항목을 기반으로 다른 구독자에게 액세스 제어를 유지 관리하는 데 도움이됩니다.

노드/클라이언트 당 3 가지 다른 주제 사용시 큰 문제가 있습니다 - "데이터"페이로드를 게시 한 직후와 "rssi"를 게시하기 전에 MQTT 클라이언트와 서버 간의 연결이 끊어진 경우 (손실 됨) "및"타임 스탬프 "페이로드는 세 데이터 요소 간의 불일치로,"데이터 "항목의 메시지는 새 값을 반영하지만 다른 두 항목은 이전 값 ~ 무결성 손실을 보유합니다.

나는

/노드/NODE_ID/데이터/_data/RSSI/_rssi/목차/_toc

또는

/노드 같은 한 줄의 항목을 사용할 수 있습니다/node_id/(_ data, _rssi, _toc)

그리고 _data, _rssi 및 _toc을 해당 값을 파싱하고 값을 분리합니다. 마지막 주제 스타일은 특히 클라이언트가 게시 할 횟수를 줄여 데이터 비용 및 무결성 오류를 줄입니다. 길이도 짧습니다. 그러나 이것은 자연스럽고 지저분한 일이며 오류는 쉽게 도약 할 수 있습니다.

누군가가 항상 데이터 무결성을 유지하고 클라이언트가 수행해야하는 게시 횟수를 최소화하는 중간 방법을 제안 할 수 있습니까? 깨끗한 메시지 구조를 유지합니다. 분명히 데이터 무결성을 원하지만 구독자간에 액세스 권한을 분리하려고합니다.

+1

특정 가입자가 부분 집합 (예 : _data 및 _toc, _rssi 및 _toc 대 3 가지)을 볼 수 있도록 허용 한 측정 집합 (위의 3 가지 : _data, _rssi 및 _toc)을 말하고 있습니까?센서 노드가 액세스 제어를 담당하는 것을 원하지 않는 것 같습니다. 설계 관점에서, 하나의 가입자 만 원시 측정에 대한 전체 액세스 권한을 갖도록 허용 한 다음 해당 데이터를 분할하고 액세스 권한에 따라 하위 집합을 다시 게시하십시오. –

+0

@GambitSupport 예, 매우 그렇습니다; 실제 네트워크 아키텍처는 많은 구성 요소와 관련하여 약간 복잡합니다. 재 게시는 훌륭한 솔루션처럼 보입니다. 무결성, 액세스 제어, 낮은 데이터 전송 비용과 같은 3 가지 아키텍처 관련 문제를 모두 해결합니다. 놀랍게도 간단한 해결책이 나를 도망칩니다. 감사! – solyarist

답변

3

데이터를 주제로 인코딩하지 않으면 정말 엉망이되어 결국 쓸모없는 와일드 카드 구독을 사용해야한다는 것을 의미합니다.

실제로 데이터를 서로 연결해야하는 경우 유일한 옵션은 페이로드에 3 개의 값이 모두 포함 된 단일 메시지를 게시하는 것입니다. 이것은 개별 구성 요소에 대한 액세스를 분리 할 수 ​​없지만 유일한 방법입니다.

+0

당신은 분명히 사물을 보았습니다. OP가 그 주제에서 데이터를 인코딩한다는 것은 내 마음에 오지 않았다. ... –

+0

물론 나는 주제에 데이터를 넣지 않을 것이다. @gambit에서 제공하는 솔루션을 사용하려면 하나의 주제에 모든 데이터를 페이로드로 넣은 다음 더 파싱해야합니다. 답장을 보내 주셔서 감사합니다. – solyarist