MQTT에서 topic이라는 단어는 브로커가 연결된 각 클라이언트에 대해 메시지를 필터링하는 데 사용하는 UTF-8 문자열을 나타냅니다. topic은 하나 이상의 topic 레벨로 구성됩니다. 각 topic 레벨은 슬래시(topic 레벨 구분자)로 구분됩니다
myHome / groundfloor / livingroom / temperature
메시지 큐와 비교할 때 MQTT 토픽은 매우 경량입니다. 클라이언트는 게시하거나 구독하기 전에 원하는 토픽을 생성할 필요가 없습니다. 브로커는 사전 초기화 없이 유효한 각 토픽을 수락합니다. 각 토픽은 최소 1자를 포함해야 하며 토픽 문자열은 빈 공백을 허용합니다. 토픽은 대소문자를 구분합니다.
클라이언트가 토픽을 구독할 때, 게시된 메시지의 정확한 토픽을 구독하거나 와일드카드를 사용하여 여러 토픽을 동시에 구독할 수 있습니다. 와일드카드는 토픽 구독에만 사용할 수 있으며 메시지 게시에는 사용할 수 없습니다. 두 가지 종류의 와일드카드가 있습니다: _single-level과 _multi-level.
이름에서 알 수 있듯이 단일 수준 와일드카드는 하나의 토픽 수준을 대체합니다. 더하기 기호는 토픽에서 단일 수준 와일드카드를 나타냅니다.
myHome / groundfloor / + / temperature
모든 topic은 와일드카드 대신 임의의 문자열을 포함하는 경우 단일 수준 와일드카드가 있는 topic과 일치합니다. 예를 들어 _myhome/groundfloor/+/temperature에 대한 구독은 다음 결과를 생성할 수 있습니다:
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
아니요 => myHome / firstfloor / livingroom / temperature
NO => myHome / groundfloor / kitchen / fridge / temperature
다중 수준 와일드카드는 많은 토픽 수준을 다룹니다. 해시 기호는 토픽에서 다중 수준 와일드카드를 나타냅니다. 브로커가 일치하는 토픽을 결정하려면 다중 수준 와일드카드를 토픽의 마지막 문자로 배치하고 앞에 슬래시를 붙여야 합니다.
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
YES => myHome / groundfloor / kitchen / brightness
NO => myHome / firstfloor / kitchen / temperature
클라이언트가 멀티 레벨 와일드카드로 토픽을 구독하면, 토픽이 얼마나 길거나 깊든 관계없이 와일드카드 문자 앞의 패턴으로 시작하는 토픽의 모든 메시지를 수신합니다. 멀티 레벨 와일드카드만 토픽으로 지정하면 (_#), MQTT 브로커로 전송되는 모든 메시지를 수신합니다.