SUBSCRIBE - 이름 지정된 토픽으로 Subscribe

SUBSCRIBE 메시지를 사용하여 클라이언트는 원하는 하나 이상의 토픽 이름을 브로커에 등록할 수 있습니다. 이러한 토픽에 publish된 메시지는 브로커에서 클라이언트로 PUBLISH 메시지로서 전달됩니다. SUBSCRIBE 메시지는 subscriber가 publish된 메시지를 수신할 QoS 레벨을 지정하기도 합니다.

고정 헤더

다음 표에서는 고정된 헤더 형식을 보여줍니다.

비트 7 6 5 4 3 2 1 0
바이트 1 메시지 유형 (8) DUP 플래그 QoS 레벨 RETAIN
  1 0 0 0 0 0 1 x
바이트 2 나머지 길이
QoS 레벨
SUBSCRIBE 메시지는 QoS 레벨 1을 사용하여 여러 subscription 요청을 수신확인합니다. 해당 SUBACK 메시지는 메시지 ID를 대조하여 식별합니다. 또한 PUBLISH 메시지와 동일한 방법으로 SUBSCRIBE 메시지 재시도를 핸들링합니다.
DUP 플래그
이 예에서는 DUP 플래그는 0으로 설정되어 메시지가 맨 처음으로 송신되고 있음을 표시합니다. 지정된 시간 종료 기간 후에도 SUBACK 메시지가 도달하지 않아 이 메시지가 재송신 중인 경우에는, 메시지가 이미 수신된 메시지와 중복될 수 있음을 브로커에 표시하도록 DUP 비트가 설정됩니다.
RETAIN 플래그
사용되지 않음
나머지 길이 필드
페이로드(payload)의 길이. 다중 바이트 필드일 수 있습니다.

가변 헤더

SUBSCRIBE 메시지에 QoS 레벨 1이 있으므로 가변 헤더에는 메시지 ID가 들어 있습니다.

일반적으로 프로토콜 라이브러리가 메시지 ID를 생성하여 하나의 리턴 핸들로서 이 ID를 publish 응용프로그램에 다시 전달합니다. 이는 단일 클라이언트에서 실행 중인 여러 응용프로그램 또는 여러 publish하는 스레드가 중복된 메시지 ID를 생성하지 못하게 합니다.

메시지 ID 0 (0x0000)은 올바르지 않은 메시지 ID로 예약되어 있으므로 사용해서는 안됩니다. 메시지 ID는 16비트의 사인이 없는 정수로서, 일반적으로는 하나의 메시지에서 그 다음 메시지로 정확히 1씩 증가하지만, 반드시 그렇게 할 필요는 없습니다. 2바이트의 메시지 ID 순서는 먼저 MSB가 오고 그 다음에 LSB(Big Endian)가 옵니다.

다음 표에서는 메시지 ID가 10인 가변 헤더의 형식 예를 보여줍니다.

  설명 7 6 5 4 3 2 1 0
메시지 ID
바이트 1 메시지 ID MSB (0) 0 0 0 0 0 0 0 0
바이트 2 메시지 ID LSB (10) 0 0 0 0 1 0 1 0

페이로드(Payload)

SUBSCRIBE 메시지의 페이로드(payload)에는 클라이언트가 subscribe할 토픽 이름의 목록과 클라이언트가 메시지를 수신할 QoS 레벨이 포함되어 있습니다. 문자열은 UTF 인코딩되어 있으며 QoS 레벨은 1바이트의 2비트를 차지합니다. 이러한 토픽/QoS 쌍은 다음 표에 있는 페이로드(payload) 예에 표시된 대로 연속적으로 채워집니다.

토픽 이름 "a/b"
요청된 QoS 1
토픽 이름 "c/d"
요청된 QoS 2

SUBSCRIBE 메시지의 토픽 이름은 압축되어 있지 않습니다.

페이로드(payload) 예의 형식은 다음 표에 표시되어 있습니다.

  설명 7 6 5 4 3 2 1 0
토픽 이름
바이트 1 길이 MSB (0) 0 0 0 0 0 0 0 0
바이트 2 길이 LSB (3) 0 0 0 0 0 0 1 1
바이트 3 'a' (0x61) 0 1 1 0 0 0 0 1
바이트 4 '/' (0x2F) 0 0 1 0 1 1 1 1
바이트 5 'b' (0x62) 0 1 1 0 0 0 1 0
요청된 QoS
바이트 6 요청된 QoS (1) x x x x x x 0 1
토픽 이름
바이트 7 길이 MSB (0) 0 0 0 0 0 0 0 0
바이트 8 길이 LSB (3) 0 0 0 0 0 0 1 1
바이트 9 'c' (0x63) 0 1 1 0 0 0 1 1
바이트 10 '/' (0x2F) 0 0 1 0 1 1 1 1
바이트 11 'd' (0x64) 0 1 1 0 0 1 0 0
요청된 QoS
바이트 12 요청된 QoS (2) x x x x x x 1 0

요청된 QoS 레벨이 부여된다고 가정할 때, 클라이언트는 publisher로부터 전송된 원래 메시지의 QoS 레벨에 따라 이 레벨 이하의 레벨에서 PUBLISH 메시지를 수신합니다. 예를 들면, 클라이언트에 특정 토픽으로의 QoS 레벨 1 subscription이 있으면, 해당 토픽에 대한 QoS 레벨 0 PUBLISH 메시지가 QoS 레벨 0의 클라이언트로 전달됩니다. 동일한 토픽에 대한 QoS 레벨 2 PUBLISH 메시지는 클라이언트로 전달하기 위해 QoS 레벨 1로 다운그레이드됩니다.

결과적으로 QoS 레벨이 2인 토픽을 subscribe하는 것은 publish된 QoS에서 이 토픽에 대한 메시지를 수신하는 것과 동일합니다.

요청된 QoS 필드는 다음 표에 표시된 대로 각 UTF 인코딩 토픽 이름을 따라 바이트로 인코딩됩니다.

비트 7 6 5 4 3 2 1 0
  예약됨 예약됨 예약됨 예약됨 예약됨 예약됨 QoS 레벨
  x x x x x x    

이 바이트의 상위 6비트는 현재 프로토콜 버전에서 사용되지 않습니다. 나중에 사용하기 위해 예약되어 있습니다.

응답

클라이언트에서 SUBSCRIBE 메시지를 수신하면, 브로커는 SUBACK 메시지로 응답합니다.

주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac11010_