이 가이드에서는 MQTT v5 요청-응답 메시징 패턴을 사용하여 MQTT 브로커를 통해 명령 응답 흐름을 구현하는 방법을 알아봅니다. 클라우드 애플리케이션이 디바이스에 명령을 보내고 디바이스에서 응답을 받는 샘플 시나리오를 고려합니다.
필수 조건
- MQTT 브로커를 사용하도록 설정된 Event Grid 네임스페이스를 만들었습니다. 이 빠른 시작 - MQTT 토픽에 게시 및 구독을 참조하여 네임스페이스, 하위 리소스를 만들고 MQTT 토픽에 게시 및 구독합니다.
요청-응답 메시징 패턴을 구현하기 위해 Event Grid 네임스페이스에 필요한 구성
다음은 MQTT 브로커를 사용하여 요청-응답 메시징 패턴을 달성하기 위한 샘플 구성입니다.
CA 인증서
클라이언트 인증서에 서명하는 데 사용되는 CA 인증서를 추가합니다.
클라이언트
- 클라우드 애플리케이션을 네임스페이스에 클라이언트로 등록합니다. 값이 "cloudApp"인 "type"이라는 특성을 클라이언트에 추가합니다.
- 디바이스를 네임스페이스에 클라이언트로 등록합니다. 값이 "device"인 클라이언트에 "type" 특성을 추가합니다.
지원되는 인증 방법을 사용할 수 있습니다. 이 샘플 구성은 CA 인증서 체인 기반 인증을 보여 줍니다. 클라이언트 인증 이름이 클라이언트 인증서의 제목 필드에 있다고 가정합니다.
클라이언트 그룹
두 개의 클라이언트 그룹을 만듭니다. 하나는 클라우드 애플리케이션 클라이언트용이고 다른 하나는 모든 디바이스용입니다.
"cloudAppGrp" 클라이언트 그룹에는 "type" 특성의 값이 "cloudApp"으로 설정된 클라이언트가 포함됩니다.
"devicesGrp" 클라이언트 그룹에는 "device" 유형의 모든 클라이언트가 포함됩니다.
토픽 공간
클라우드 애플리케이션이 desired-property 요청을 게시하는 토픽 템플릿 "devices/+/desired"를 사용하여 "requestDesiredProperties" 토픽 공간을 만듭니다. 와일드카드를 사용하면 클라우드 애플리케이션이 모든 디바이스에 요청을 게시할 수 있습니다.
클라우드 애플리케이션이 디바이스에서 reported-property 응답을 수신하도록 구독하는 토픽 템플릿 "devices/+/reported"를 사용하여 "responseReportedProperties" 토픽 공간을 만듭니다.
디바이스가 클라우드 애플리케이션에서 desired-property 요청을 수신하도록 구독하는 토픽 템플릿 "devices/${client.authenticationName}/desired"를 사용하여 "deviceDesiredSub" 토픽 공간을 만듭니다. 인증 이름 변수는 디바이스가 해당 디바이스의 메시지만 수신할 수 있도록 하는 데 사용됩니다.
디바이스가 reported-property 응답을 게시하는 토픽 템플릿 "devices/${client.authenticationName}/reported"를 사용하여 "deviceReportedPub" 토픽 공간을 만듭니다.
권한 바인딩
클라우드 애플리케이션 그룹이 요청 토픽에 게시하고 응답 토픽을 구독할 수 있도록 하는 권한 바인딩을 만듭니다. 디바이스 그룹은 요청 토픽을 구독하고 응답 토픽에 게시합니다.
"requestDesiredProperties" 토픽 공간에 대한 게시자 액세스 권한이 있는 "cloudAppGrp"를 부여하는 "clientAppDesiredPub" 권한 바인딩을 만듭니다.
"responseReportedProperties" 토픽 공간에 대한 구독자 액세스 권한이 있는 "cloudAppGrp"를 부여하는 "clientAppReportedSub" 권한 바인딩을 만듭니다.
"deviceDesiredSub" 토픽 공간에 대한 구독자 액세스 권한이 있는 "devicesGrp"를 부여하는 "deviceDesiredSub" 권한 바인딩을 만듭니다.
"deviceReportedPub" 토픽 공간에 대한 게시자 액세스 권한이 있는 "devicesGrp"를 부여하는 "deviceReportedPub" 권한 바인딩을 만듭니다.
MQTTX 애플리케이션을 사용하여 요청-응답 메시지 표시
MQTTX 애플리케이션을 사용하여 클라우드 애플리케이션 및 디바이스를 MQTT 브로커에 연결합니다.
클라우드 애플리케이션 클라이언트에 "devices/+/reported"를 구독으로 추가
자신의 요청 토픽을 디바이스에 대한 구독으로 추가합니다. 예를 들어 "device1" 클라이언트에 구독으로 "devices/device1/desired"를 추가합니다.
클라우드 애플리케이션은 "devices/device2/desired" 토픽에서 device2에 요청을 게시하고 응답 토픽 "devices/device2/reported"를 포함합니다. 클라우드 애플리케이션에는 상관 관계 데이터가 "device2-tempupdate1"로 포함됩니다.
device2는 "devices/device2/desired" 토픽에서 메시지를 수신하고 응답 토픽 "devices/device2/reported"의 현재 속성 상태를 클라우드 애플리케이션 클라이언트에 보고합니다. 또한 device2에는 클라우드 애플리케이션이 원래 요청에 대한 응답을 다시 추적할 수 있는 "device2-tempupdate1"로 상관 관계 데이터가 포함됩니다.
참고 항목
- 이러한 MQTT 메시지는 Event Grid 구독을 통해 라우팅되고 스토리지 또는 캐시에 기록되어 원하는 디바이스 상태와 현재 상태를 추적할 수 있습니다.
- "연결됨" 및 "연결 끊김"과 같은 클라이언트 수명 주기 이벤트를 사용하여 필요에 따라 모든 요청을 다시 전송하는 디바이스의 가용성을 추적할 수 있습니다.
- 요청-응답 메시지 패턴은 요청 메시지 페이로드에 응답 토픽을 포함하여 MQTT v3.1.1에서도 수행할 수 있습니다. 디바이스 클라이언트는 메시지 페이로드를 구문 분석하고, 응답 토픽을 식별하고, 해당 토픽에 응답을 게시해야 합니다.
다음 단계
- 자습서: 네임스페이스 항목을 사용하여 Azure Event Hubs에 MQTT 메시지 라우팅
- 자습서: 사용자 지정 항목을 사용하여 Azure Functions에 MQTT 메시지 라우팅
- 클라이언트 수명 주기 이벤트에 대해 자세히 알아보기
- 코드 샘플의 경우 이 리포지토리로 이동하세요.