다음을 통해 공유


Azure Event Grid의 MQTT 브로커 기능을 사용하여 요청-응답 메시징 패턴을 구현하는 방법

이 가이드에서는 MQTT v5 요청-응답 메시징 패턴을 사용하여 MQTT 브로커를 통해 명령 응답 흐름을 구현하는 방법을 알아봅니다. 클라우드 애플리케이션이 디바이스에 명령을 보내고 디바이스에서 응답을 받는 샘플 시나리오를 고려합니다.

필수 조건

  • MQTT 브로커를 사용하도록 설정된 Event Grid 네임스페이스를 만들었습니다. 이 빠른 시작 - MQTT 토픽에 게시 및 구독을 참조하여 네임스페이스, 하위 리소스를 만들고 MQTT 토픽에 게시 및 구독합니다.

요청-응답 메시징 패턴을 구현하기 위해 Event Grid 네임스페이스에 필요한 구성

다음은 MQTT 브로커를 사용하여 요청-응답 메시징 패턴을 달성하기 위한 샘플 구성입니다.

CA 인증서

클라이언트 인증서에 서명하는 데 사용되는 CA 인증서를 추가합니다.

Screenshot showing the list of configured certificates.

클라이언트

  • 클라우드 애플리케이션을 네임스페이스에 클라이언트로 등록합니다. 값이 "cloudApp"인 "type"이라는 특성을 클라이언트에 추가합니다.
  • 디바이스를 네임스페이스에 클라이언트로 등록합니다. 값이 "device"인 클라이언트에 "type" 특성을 추가합니다.

지원되는 인증 방법을 사용할 수 있습니다. 이 샘플 구성은 CA 인증서 체인 기반 인증을 보여 줍니다. 클라이언트 인증 이름이 클라이언트 인증서의 제목 필드에 있다고 가정합니다.

Screenshot showing the list of configured clients.

클라이언트 그룹

두 개의 클라이언트 그룹을 만듭니다. 하나는 클라우드 애플리케이션 클라이언트용이고 다른 하나는 모든 디바이스용입니다.

  • "cloudAppGrp" 클라이언트 그룹에는 "type" 특성의 값이 "cloudApp"으로 설정된 클라이언트가 포함됩니다.

  • "devicesGrp" 클라이언트 그룹에는 "device" 유형의 모든 클라이언트가 포함됩니다.

    Screenshot showing the list of configured client groups.

토픽 공간

  • 클라우드 애플리케이션이 desired-property 요청을 게시하는 토픽 템플릿 "devices/+/desired"를 사용하여 "requestDesiredProperties" 토픽 공간을 만듭니다. 와일드카드를 사용하면 클라우드 애플리케이션이 모든 디바이스에 요청을 게시할 수 있습니다.

  • 클라우드 애플리케이션이 디바이스에서 reported-property 응답을 수신하도록 구독하는 토픽 템플릿 "devices/+/reported"를 사용하여 "responseReportedProperties" 토픽 공간을 만듭니다.

  • 디바이스가 클라우드 애플리케이션에서 desired-property 요청을 수신하도록 구독하는 토픽 템플릿 "devices/${client.authenticationName}/desired"를 사용하여 "deviceDesiredSub" 토픽 공간을 만듭니다. 인증 이름 변수는 디바이스가 해당 디바이스의 메시지만 수신할 수 있도록 하는 데 사용됩니다.

    Screenshot showing the device desired subscribe topic space configuration.

  • 디바이스가 reported-property 응답을 게시하는 토픽 템플릿 "devices/${client.authenticationName}/reported"를 사용하여 "deviceReportedPub" 토픽 공간을 만듭니다.

권한 바인딩

클라우드 애플리케이션 그룹이 요청 토픽에 게시하고 응답 토픽을 구독할 수 있도록 하는 권한 바인딩을 만듭니다. 디바이스 그룹은 요청 토픽을 구독하고 응답 토픽에 게시합니다.

  • "requestDesiredProperties" 토픽 공간에 대한 게시자 액세스 권한이 있는 "cloudAppGrp"를 부여하는 "clientAppDesiredPub" 권한 바인딩을 만듭니다.

  • "responseReportedProperties" 토픽 공간에 대한 구독자 액세스 권한이 있는 "cloudAppGrp"를 부여하는 "clientAppReportedSub" 권한 바인딩을 만듭니다.

  • "deviceDesiredSub" 토픽 공간에 대한 구독자 액세스 권한이 있는 "devicesGrp"를 부여하는 "deviceDesiredSub" 권한 바인딩을 만듭니다.

  • "deviceReportedPub" 토픽 공간에 대한 게시자 액세스 권한이 있는 "devicesGrp"를 부여하는 "deviceReportedPub" 권한 바인딩을 만듭니다.

    Screenshot showing the list of configured permission bindings.

MQTTX 애플리케이션을 사용하여 요청-응답 메시지 표시

  • MQTTX 애플리케이션을 사용하여 클라우드 애플리케이션 및 디바이스를 MQTT 브로커에 연결합니다.

  • 클라우드 애플리케이션 클라이언트에 "devices/+/reported"를 구독으로 추가

  • 자신의 요청 토픽을 디바이스에 대한 구독으로 추가합니다. 예를 들어 "device1" 클라이언트에 구독으로 "devices/device1/desired"를 추가합니다.

  • 클라우드 애플리케이션은 "devices/device2/desired" 토픽에서 device2에 요청을 게시하고 응답 토픽 "devices/device2/reported"를 포함합니다. 클라우드 애플리케이션에는 상관 관계 데이터가 "device2-tempupdate1"로 포함됩니다.

    Screenshot showing the configuration to include response topic and correlation data.

  • device2는 "devices/device2/desired" 토픽에서 메시지를 수신하고 응답 토픽 "devices/device2/reported"의 현재 속성 상태를 클라우드 애플리케이션 클라이언트에 보고합니다. 또한 device2에는 클라우드 애플리케이션이 원래 요청에 대한 응답을 다시 추적할 수 있는 "device2-tempupdate1"로 상관 관계 데이터가 포함됩니다.

    Screenshot showing the response message from device to cloud application.

참고 항목

  • 이러한 MQTT 메시지는 Event Grid 구독을 통해 라우팅되고 스토리지 또는 캐시에 기록되어 원하는 디바이스 상태와 현재 상태를 추적할 수 있습니다.
  • "연결됨" 및 "연결 끊김"과 같은 클라이언트 수명 주기 이벤트를 사용하여 필요에 따라 모든 요청을 다시 전송하는 디바이스의 가용성을 추적할 수 있습니다.
  • 요청-응답 메시지 패턴은 요청 메시지 페이로드에 응답 토픽을 포함하여 MQTT v3.1.1에서도 수행할 수 있습니다. 디바이스 클라이언트는 메시지 페이로드를 구문 분석하고, 응답 토픽을 식별하고, 해당 토픽에 응답을 게시해야 합니다.

다음 단계