3.3. 네트워크 연결에서 MQTT 사용
브로커는 MQTT v3.1.1 및 v5.0 (이전 v3.1 코드 메시지 형식도 지원)을 지원합니다. MQTT는 경량의 클라이언트, 서버, 게시/구독 메시징 프로토콜입니다. MQTT는 메시징 오버헤드 및 네트워크 트래픽과 클라이언트의 코드 풋프린트를 줄입니다. 이러한 이유로 MQTT는 센서 및 작동기와 같은 제한된 장치에 이상적으로 적합하며, IoT(Internet of Things)의 사실상 표준 통신 프로토콜이 빠르게 되고 있습니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. - MQTT 프로토콜이 활성화된 어셉터를 추가합니다. 예를 들면 다음과 같습니다.
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT</acceptor> ... </acceptors>
MQTT에는 다음과 같은 여러 유용한 기능이 제공됩니다.
- QoS (Quality of Service)
- 각 메시지는 연결된 서비스 품질을 정의할 수 있습니다. 브로커는 정의된 최고 수준의 서비스 수준에서 구독자에게 메시지를 전달하려고 합니다.
- 보존 메시지
특정 주소에 대해 메시지를 유지할 수 있습니다. 클라이언트가 연결되기 전에 보존 메시지가 전송된 경우에도 해당 주소에 대한 새 구독자는 다른 메시지보다 마지막 메시지보다 마지막 메시지보다 먼저 메시지를 수신합니다.
보존 메시지는
sys.mqtt.<topic name
>이라는 큐에 저장되며 클라이언트가 보존 메시지를 삭제할 때까지 또는 메시지가 만료될 때까지 큐에 남아 있습니다. 큐가 비어 있으면 명시적으로 삭제할 때까지 큐가 제거되지 않습니다. 예를 들어 다음 구성은 큐를 삭제합니다.<address-setting match="$sys.mqtt.retain.#"> <auto-delete-queues>true</auto-delete-queues> <auto-delete-addresses>true</auto-delete-addresses> </address-setting>
- 와일드카드 서브스크립션
- MQTT 주소는 파일 시스템의 계층 구조와 유사합니다. 클라이언트는 특정 주제 또는 계층의 전체 분기를 구독할 수 있습니다.
- 메시지 표시
- 클라이언트는 연결 패킷의 일부로 "메시지"를 설정할 수 있습니다. 클라이언트가 비정상적으로 연결이 끊어지면 브로커는 메시지를 지정된 주소에 게시합니다. 다른 가입자는 메시지를 수신하고 그에 따라 대응할 수 있습니다.
MQTT 프로토콜에 대한 자세한 내용은 사양을 참조하십시오.
3.3.1. MQTT 속성 구성
MQTT 어셉터에 키-값 쌍을 추가하여 연결 속성을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT;receiveMaximum=50000;topicAliasMaximum=50000;maximumPacketSize;134217728; serverKeepAlive=30;closeMqttConnectionOnPublishAuthorizationFailure=false</acceptor> ... </acceptors>
- receiveMaximum
-
브로커가 승인이 필요하기 전에 클라이언트에서 수신할 수 있는 최대 QoS 1 및 2 메시지 수를 지정하여 flow-control을 활성화합니다. 기본값은
65535
입니다. 값-1
은 클라이언트에서 브로커로의 흐름 제어를 비활성화합니다. 이 값은 값을 0으로 설정하는 것과 동일하지만 CONNACK 패킷의 크기를 줄입니다. - topicAliasMaximum
-
클라이언트가 브로커가 지원하는 최대 별칭 수를 지정합니다. 기본값은
65535
입니다. 값 -1은 브로커가 주제 별칭 제한을 알릴 수 없습니다. 이 값은 값을 0으로 설정하는 것과 동일하지만 CONNACK 패킷의 크기를 줄입니다. - maximumPacketSize
-
브로커가 클라이언트에서 수락할 수 있는 최대 패킷 크기를 지정합니다. 기본값은
268435455
입니다. 값 -1은 브로커가 최대 패킷 크기를 알릴 수 없으므로 들어오는 패킷 크기에 제한이 적용되지 않습니다. - serverKeepAlive
-
브로커가 비활성 클라이언트 연결을 열린 상태로 유지하는 기간을 지정합니다. 구성된 값은 클라이언트에 대해 구성된 keep-alive 값보다 작거나 클라이언트에 대해 구성된 값이 0인 경우에만 연결에 적용됩니다. 기본값은
60
초입니다. 값-1
은 브로커가 항상 클라이언트의 활성 값을 수락한다는 것을 의미합니다(해당 값이 0인 경우에도). - closeMqttConnectionOnPublishAuthorizationFailure
-
기본적으로 권한 부여 부족으로 인해 ECDHELISH 패킷이 실패하면 브로커는 네트워크 연결을 종료합니다. 브로커가 네트워크 연결을 닫는 대신 긍정적인 승인을 보내려면
closeMqttConnectionOnPublishAuthorizationFailure
를false
로 설정합니다.