이것은 MQTT 주제에 관한 복합 문제점입니다.3 개의 데이터 포인트 게시를위한 MQTT 주제의 계층
Sensed Data를 "_data", Signal Strength를 "_rssi", 데이터 수집 시간을 "_toc"로 여러 개의 MQTT 클라이언트 (센서 노드)에서 3 가지 주제로 게시합니다.
/노드/NODE_ID/데이터/
"NODE_ID"는 식별자 (정수/부호)위한
/노드/NODE_ID/RSSI/
/노드/NODE_ID/TOC/
클라이언트 (노드) (노드에 대해 고유). 는 각각 페이로드_data (부동 소수점 데이터) _rssi (부동 소수점) 및 _toc (유닉스 날짜)이다. 분명히 세 가지 데이터 요소는 모두 서로 관련되어 있습니다.
이 디자인은 구독 권한이있는 항목을 기반으로 다른 구독자에게 액세스 제어를 유지 관리하는 데 도움이됩니다.
노드/클라이언트 당 3 가지 다른 주제 사용시 큰 문제가 있습니다 - "데이터"페이로드를 게시 한 직후와 "rssi"를 게시하기 전에 MQTT 클라이언트와 서버 간의 연결이 끊어진 경우 (손실 됨) "및"타임 스탬프 "페이로드는 세 데이터 요소 간의 불일치로,"데이터 "항목의 메시지는 새 값을 반영하지만 다른 두 항목은 이전 값 ~ 무결성 손실을 보유합니다.
나는
/노드/NODE_ID/데이터/_data/RSSI/_rssi/목차/_toc
또는
/노드 같은 한 줄의 항목을 사용할 수 있습니다/node_id/(_ data, _rssi, _toc)
그리고 _data, _rssi 및 _toc을 해당 값을 파싱하고 값을 분리합니다. 마지막 주제 스타일은 특히 클라이언트가 게시 할 횟수를 줄여 데이터 비용 및 무결성 오류를 줄입니다. 길이도 짧습니다. 그러나 이것은 자연스럽고 지저분한 일이며 오류는 쉽게 도약 할 수 있습니다.
누군가가 항상 데이터 무결성을 유지하고 클라이언트가 수행해야하는 게시 횟수를 최소화하는 중간 방법을 제안 할 수 있습니까? 깨끗한 메시지 구조를 유지합니다. 분명히 데이터 무결성을 원하지만 구독자간에 액세스 권한을 분리하려고합니다.
특정 가입자가 부분 집합 (예 : _data 및 _toc, _rssi 및 _toc 대 3 가지)을 볼 수 있도록 허용 한 측정 집합 (위의 3 가지 : _data, _rssi 및 _toc)을 말하고 있습니까?센서 노드가 액세스 제어를 담당하는 것을 원하지 않는 것 같습니다. 설계 관점에서, 하나의 가입자 만 원시 측정에 대한 전체 액세스 권한을 갖도록 허용 한 다음 해당 데이터를 분할하고 액세스 권한에 따라 하위 집합을 다시 게시하십시오. –
@GambitSupport 예, 매우 그렇습니다; 실제 네트워크 아키텍처는 많은 구성 요소와 관련하여 약간 복잡합니다. 재 게시는 훌륭한 솔루션처럼 보입니다. 무결성, 액세스 제어, 낮은 데이터 전송 비용과 같은 3 가지 아키텍처 관련 문제를 모두 해결합니다. 놀랍게도 간단한 해결책이 나를 도망칩니다. 감사! – solyarist